多个异步 post 请求与 nodejs 中的文件
multiple asynchronous post request with files in nodejs
我尝试在 nodejs 中发送一堆 post 文件上传请求。
使用 axios.post,我可以轻松地发出单个请求。但是在尝试发送多个异步请求时出现错误。
基于axios文档,使用axios.all([ axios.get(), axios.get(), ...]) 进行异步请求。
如果我发送代码,错误显示:
"Error: Request failed with status code 500 ~ "
。当我发送一个没有文件上传的请求时,这个错误是一样的。所以我想当我发送异步请求时我的代码没有附加文件。
请告诉我我缺少什么。
我的代码如下:
var axios = require('axios');
var FormData = require('form-data');
var fs = require('fs');
var data = new FormData();
data.append('files', fs.createReadStream('./liscense.jpg'));
var config = {
method: 'post',
url: 'https://domainname/scan/id',
headers: {
...data.getHeaders()
},
data : data
};
axios
.all([axios(config), axios(config)])
.then(
axios.spread((res1, res2) => {
console.log(res1.data, res2.data);
})
)
.catch((error) => {
console.log(error);
});
你的问题是你正在发送一个空流,
您的表单数据中有一个“_streams”数组,其中包含您的“liscense.jpg”文件的流,当您POST向目标主机发出第一个请求时,该流将为空并且您的其他请求流为空,因此文件未到达您的目的地。
简而言之,此代码仅在第一次请求中发送一次您的文件,其他请求不包含您的 file/files。
你可以试试这个:
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
function postRequest() {
const data = new FormData();
data.append('files', fs.createReadStream('./liscense.jpg'));
const config = {
method: 'post',
url: 'https://domainname/scan/id',
headers: {
...data.getHeaders()
},
data: data
};
return config;
}
axios
.all([axios(postRequest()), axios(postRequest())])
.then(
axios.spread((res1, res2) => {
console.log(res1.data, res2.data);
})
)
.catch((error) => {
console.log(error);
});
我尝试在 nodejs 中发送一堆 post 文件上传请求。 使用 axios.post,我可以轻松地发出单个请求。但是在尝试发送多个异步请求时出现错误。
基于axios文档,使用axios.all([ axios.get(), axios.get(), ...]) 进行异步请求。
如果我发送代码,错误显示:
"Error: Request failed with status code 500 ~ "
。当我发送一个没有文件上传的请求时,这个错误是一样的。所以我想当我发送异步请求时我的代码没有附加文件。
请告诉我我缺少什么。
我的代码如下:
var axios = require('axios');
var FormData = require('form-data');
var fs = require('fs');
var data = new FormData();
data.append('files', fs.createReadStream('./liscense.jpg'));
var config = {
method: 'post',
url: 'https://domainname/scan/id',
headers: {
...data.getHeaders()
},
data : data
};
axios
.all([axios(config), axios(config)])
.then(
axios.spread((res1, res2) => {
console.log(res1.data, res2.data);
})
)
.catch((error) => {
console.log(error);
});
你的问题是你正在发送一个空流,
您的表单数据中有一个“_streams”数组,其中包含您的“liscense.jpg”文件的流,当您POST向目标主机发出第一个请求时,该流将为空并且您的其他请求流为空,因此文件未到达您的目的地。
简而言之,此代码仅在第一次请求中发送一次您的文件,其他请求不包含您的 file/files。
你可以试试这个:
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
function postRequest() {
const data = new FormData();
data.append('files', fs.createReadStream('./liscense.jpg'));
const config = {
method: 'post',
url: 'https://domainname/scan/id',
headers: {
...data.getHeaders()
},
data: data
};
return config;
}
axios
.all([axios(postRequest()), axios(postRequest())])
.then(
axios.spread((res1, res2) => {
console.log(res1.data, res2.data);
})
)
.catch((error) => {
console.log(error);
});