不能 post 多个长请求 Axios
Cannot post multiple and long requst Axios
我需要向另一个 API 发送 post 请求,这将 return 结果大约需要 7 秒。
如果我尝试一个接一个地发送 post,效果很好。但是一旦我循环它或发送多个请求,它就会 returns 错误。
错误有时是Error: socket hang up
或status code: 504
我试过了
多个then().then().th
async/await
内部 for 循环
aync/await
像这样一行一行
const toonifyNewFileName = `./uploads/Toonified-toonify-${baseFileName}`
const toonifyRes = await axios.post(toonifyUrl, formData, {headers: headers})
var {data:{num_faces, b64_encoded_output}} = toonifyRes;
var base64Buffer = Buffer.from(b64_encoded_output, "base64");
writeFile(toonifyNewFileName, base64Buffer, err => console.log("DONE 1"));
const comicNewFileName = `./uploads/Toonified-comic-${baseFileName}`
const comicRes = await axios.post(comicUrl, formData, {headers: headers})
var {data:{num_faces, b64_encoded_output: newB64}} = comicRes;
var base64Buffer2 = Buffer.from(newB64, "base64");
writeFile(comicNewFileName, base64Buffer2, err => console.log("DONE 2"));
跟writeFile()
没关系,我删了,没用
我的猜测是,由于第一个请求大约需要 7 到 8 秒,这就是为什么它会导致下一个请求出错的原因?
总结
我需要 post 多个请求,每个请求大约需要 7 到 8 秒。
但它 returns socket hang up
错误或 status code: 504 GATEWAY TIME OUT
我该怎么办?
原来我的问题不是关于 axios,而是关于 form-data
。
第一个请求很顺利,但是秒了,我不知道为什么,但我认为 form-data
有问题,可能表单数据为空
所以我想出了每次发送时都要初始化 formdata axios.post()
这是代码
const arr = [some arrya i need, like 4 elements];
await Promise.all(arr.map(async(elem) => {
const formData = new FormData();
formData.append('image', createReadStream(pictureUri));
const headers = { ... };
...
const response = await axios.post(url, formData, {headers: headers});
do some work...
}))
关键是我每次都必须生成 form-data
,即使它总是相同的...
很明显socket挂了!不要理会http,它有点复杂。使用 node unirest 并关闭数据流。
有了这个,你就可以远程循环批量发送文件了。
var unirest = require('unirest');
var req = unirest('POST', 'localhost:3200/store/artifact/metamodel')
.attach('file', '/home/arsene/DB.ecore')
.field('description', 'We are trying to save the metamodel')
.field('project', '6256d72a81c4b80ccfc1768b')
.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.raw_body);
});
希望对您有所帮助!
我需要向另一个 API 发送 post 请求,这将 return 结果大约需要 7 秒。
如果我尝试一个接一个地发送 post,效果很好。但是一旦我循环它或发送多个请求,它就会 returns 错误。
错误有时是Error: socket hang up
或status code: 504
我试过了
多个
then().then().th
async/await
内部 for 循环aync/await
像这样一行一行const toonifyNewFileName = `./uploads/Toonified-toonify-${baseFileName}` const toonifyRes = await axios.post(toonifyUrl, formData, {headers: headers}) var {data:{num_faces, b64_encoded_output}} = toonifyRes; var base64Buffer = Buffer.from(b64_encoded_output, "base64"); writeFile(toonifyNewFileName, base64Buffer, err => console.log("DONE 1")); const comicNewFileName = `./uploads/Toonified-comic-${baseFileName}` const comicRes = await axios.post(comicUrl, formData, {headers: headers}) var {data:{num_faces, b64_encoded_output: newB64}} = comicRes; var base64Buffer2 = Buffer.from(newB64, "base64"); writeFile(comicNewFileName, base64Buffer2, err => console.log("DONE 2"));
跟writeFile()
没关系,我删了,没用
我的猜测是,由于第一个请求大约需要 7 到 8 秒,这就是为什么它会导致下一个请求出错的原因?
总结
我需要 post 多个请求,每个请求大约需要 7 到 8 秒。
但它 returns socket hang up
错误或 status code: 504 GATEWAY TIME OUT
我该怎么办?
原来我的问题不是关于 axios,而是关于 form-data
。
第一个请求很顺利,但是秒了,我不知道为什么,但我认为 form-data
有问题,可能表单数据为空
所以我想出了每次发送时都要初始化 formdata axios.post()
这是代码
const arr = [some arrya i need, like 4 elements];
await Promise.all(arr.map(async(elem) => {
const formData = new FormData();
formData.append('image', createReadStream(pictureUri));
const headers = { ... };
...
const response = await axios.post(url, formData, {headers: headers});
do some work...
}))
关键是我每次都必须生成 form-data
,即使它总是相同的...
很明显socket挂了!不要理会http,它有点复杂。使用 node unirest 并关闭数据流。 有了这个,你就可以远程循环批量发送文件了。
var unirest = require('unirest');
var req = unirest('POST', 'localhost:3200/store/artifact/metamodel')
.attach('file', '/home/arsene/DB.ecore')
.field('description', 'We are trying to save the metamodel')
.field('project', '6256d72a81c4b80ccfc1768b')
.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.raw_body);
});
希望对您有所帮助!