【发布时间】:2016-10-27 01:21:14
【问题描述】:
我正在将我的一个项目从 request 切换到更轻量级的项目(例如 got、axios 或 fetch)。一切都很顺利,但是,我在尝试上传文件流(PUT 和POST)时遇到了问题。它适用于请求包,但其他三个中的任何一个都从服务器返回 500。
我知道 500 通常意味着服务器端出现问题,但它仅与我正在测试的 HTTP 包一致。当我恢复我的代码以使用request 时,它工作正常。
这是我当前的请求代码:
Request.put(`http://endpoint.com`, {
headers: {
Authorization: `Bearer ${account.token.access_token}`
},
formData: {
content: fs.createReadStream(localPath)
}
}, (err, response, body) => {
if (err) {
return callback(err);
}
return callback(null, body);
});
这是使用另一个包的尝试之一(在这种情况下,得到了):
got.put(`http://endpoint.com`, {
headers: {
'Content-Type': 'multipart/form-data',
Authorization: `Bearer ${account.token.access_token}`,
},
body: {
content: fs.createReadStream(localPath)
}
})
.then(response => {
return callback(null, response.body);
})
.catch(err => {
return callback(err);
});
根据所获得的文档,我还尝试根据其示例将form-data 包与它结合使用,但我仍然遇到同样的问题。
我可以收集到的这 2 个之间的唯一区别是 got 我必须手动指定 Content-Type 标头,否则端点确实会给我一个适当的错误。否则,我不确定这 2 个包是如何使用流构建主体的,但正如我所说,fetch 和 axios 也会产生与 got 完全相同的错误。
如果您想要任何使用fetch 或axios 的sn-ps,我也很乐意发布它们。
【问题讨论】:
-
不确定这是否有帮助,但根据获取的文档,您需要将 FormData 作为对象的主体传递 - github.com/sindresorhus/got#form-data
-
我也试过这个。使用
form-data包,我用“内容”和流信息调用append,但我仍然遇到同样的问题。我将编辑我的问题以反映这一点。
标签: node.js request fetch axios