Axios:数据应该是字符串、Buffer或Uint8Array

t9aqgxwy  于 12个月前  发布在  iOS
关注(0)|答案(3)|浏览(198)

我在尝试使用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中有什么吗?谢谢帮助。

rseugnpd

rseugnpd1#

在花了很多时间和尝试了很多可能的事情后,我观察到我得到的错误是。

TypeError: data should be a string, Buffer or Uint8Array

字符串
在我的formData中,我将文件附加一个变量,

form.append('extractArchive', false);


这只是布尔值,axios或formData会给出错误。我将其更改为,

form.append('extractArchive', 'false');


这解决了我的问题。如果有人跑步是这样的问题,可能会有帮助。
谢谢你的帮忙。

eni9jsuy

eni9jsuy2#

这一行:

axios.post(reqUrl, form, request_config)

字符串
您在form参数中传递了一个FormData对象。Axios(在NodeJS中使用时)需要stringBufferUint8Array
当在浏览器中使用Axios时,它只是 Package 了fetch,这允许直接使用FormData),但是当在NodeJS中使用时,您需要序列化自己的请求主体(由于Boundary字段等,序列化为multipart/form-data可能会很痛苦)。
假设你 * 实际上 * 想要发出一个multipart/form-data请求,那么:

iq0todco

iq0todco3#

更新 axios
用于节点

npm i axios

字符串

相关问题