在node-fetch中如何单次请求同时发送三个数据对象
问题原因
JSON.stringify仅第一个入参为待序列化的目标数据,你直接传入三个逗号分隔的对象,后两个会被识别为无效的序列化配置参数被忽略,所以最终只会发送第一个用户对象。- 注意先确认你调用的API是否支持批量创建用户的接口,如果API本身仅支持单次创建一个用户,你需要调整为多次请求,或按API要求的批量请求格式构造数据。
修正后的代码(适配支持接收用户数组作为批量请求体的接口)
import fetch from 'node-fetch'; const baseUrl = "https://test"; const apiToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVsdfsCJ9.eyJodHRwczovL2d0bWh1Yi5jb20vYXBwX21ldGFkYXRhL2FjY291bnRJZCI6IjYxNDQ0YTEwZjdmZmUxMDAwMsdfsfWY3NWI2NiIsImlhdCI6MTYzMTg2NTM2MSwic3ViIjoiZ29vZ2xlLW9hdXRoMnwxMTUwNjc3Nzc1NzMzMsdfTQxMDk5sdfMjgifQ.0zZZS1ixt1srNU-XcEcUqoaJep0H64-YRInCCbUi6_8"; const accountId = "61444a1ad2r0f7213fsdfsffe10001f75b66"; const options = { method: "POST", headers: { Authorization: `Bearer ${apiToken}`, "gtmhub-accountid": accountId, "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, // 把三个用户对象包装成数组作为序列化入参 body: JSON.stringify([ { email: "behn_jones@okrs.tech", firstName: "Behn", lastName: "Johnes", userName: "test", }, { email: "amy_wrent@okrs.tech", firstName: "Amy", lastName: "Wrent", userName: "test", }, { email: "jake_nordon@okrs.tech", firstName: "Jake", lastName: "Nordon", userName: "test", } ]), }; const createUser = (url, settings) => { return fetch(`${url}/users`, settings) .then((response) => response.text()) .then((data) => console.log(data)) .catch((error) => { console.log(error.message); }); }; createUser(baseUrl, options);
可选方案(接口不支持批量时的多请求写法)
如果目标接口仅支持单次创建一个用户,可通过Promise.all并发发起三次请求:
// 封装单个用户创建请求 const createSingleUser = (user) => { const options = { method: "POST", headers: { Authorization: `Bearer ${apiToken}`, "gtmhub-accountid": accountId, "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify(user) } return fetch(`${baseUrl}/users`, options).then(res => res.text()) } // 三个用户数据 const users = [ { email: "behn_jones@okrs.tech", firstName: "Behn", lastName: "Johnes", userName: "test", }, { email: "amy_wrent@okrs.tech", firstName: "Amy", lastName: "Wrent", userName: "test", }, { email: "jake_nordon@okrs.tech", firstName: "Jake", lastName: "Nordon", userName: "test", } ] // 并发发起三个请求 Promise.all(users.map(user => createSingleUser(user))) .then(results => console.log('全部创建完成', results)) .catch(err => console.log('请求出错', err.message))
如果接口要求批量请求的外层需要包裹指定键(比如
{"users": [用户数组]}),只需要把JSON.stringify的入参调整为对应的对象结构即可。
内容的提问来源于stack exchange,提问作者codePanda
相关产品推荐
相关产品推荐

