如何解决Axios:数据应为字符串,Buffer或Uint8Array
尝试使用axios进行POST请求时出现此错误:
TypeError: data should be a string,Buffer or Uint8Array
这是我的代码段:
var fs = require('fs'),axios = require('axios');
var FormData = require('form-data');
var form = new FormData();
form.append('file',fs.createReadStream("qa_test_file_DOC.txlf"));
form.append('extractArchive',false);
let request_config = {
headers: {
'Authorization': `Bearer eyJhbGciOiJIUzI1NXXXX.....`,...form.getHeaders()
}
}
let reqUrl = "https://XXXXX/XX/rest/v1/XXXXX";
try {
axios.post(reqUrl,form,request_config)
.then(function (response) {
console.log(response);
return callback(response);
})
.catch(function (error) {
console.log(error);
return callback(error);
});
} catch (ex) {
console.log("exception ",ex);
}
尝试使用管道和大多数可能的解决方案。文件存在。不明白这里出了什么问题。 Readstream中的任何内容? 感谢您的帮助。
解决方法
花了很多时间并尝试了许多可能的事情之后,我观察到了我得到的错误。
TypeError: data should be a string,Buffer or Uint8Array
在我的formData中,我要在文件的后面附加一个变量
form.append('extractArchive',false);
这只是布尔值,而axios或formData为此给出了错误。 我将其更改为
form.append('extractArchive','false');
那解决了我的问题。如果有人跑步遇到这种问题,可能会有所帮助。
感谢您的帮助。
,此行:
axios.post(reqUrl,form,request_config)
您正在FormData
参数中传递form
对象。 Axios(在NodeJS中使用时)期望string
,Buffer
或Uint8Array
。
在浏览器中使用Axios时,它只包装fetch
,这可以直接使用FormData
),但是在NodeJS中使用时,您需要序列化自己的请求正文(并序列化为{由于multipart/form-data
字段等原因,{1}}可能会很痛苦。
假设您实际上想要提出Boundary
请求,然后:
-
关于如何发送
,请参见以下答案multipart/form-data
:Post form data with axios in Node.js -
这个GitHub问题:https://github.com/axios/axios/issues/789
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。