如何将NodeJS表单数据对象转换为JSON字符串



我在我的NodeJS应用程序中使用表单数据包来发送表单数据。我使用Axios拦截器将请求记录在文件中。在axiosIns.config.data中,我需要JSON字符串对应于formdata集,但目前它是formdata对象。

这个库提供了一个toString方法,但在使用它时,我发现它返回一个静态字符串[object FormData],而不是字符串化的输入。我已经就此提出了一个问题,但似乎无人理睬。

我已经创建了一个repl来重新生成。

是否有任何方法使我可以将我的formdata对象转换为可读的,可记录的,最好是JSO字符串?

我解决了

const FormData =  require("form-data");
var data = new FormData();
data.append("modid", "IM");
data.append("token", "providernagg");
data.append("cat_type", "3");
var boundary = data.getBoundary();
var data_row = data.getBuffer().toString();
console.log(rawFormDataToJSON(data_row,boundary));
function rawFormDataToJSON(raw_data,boundary){
var spl = data_row.split(boundary);
var data_out = [];
spl.forEach(element => {
let obj = {};
let ll = element.split("n");
if(ll[1]){
let key = ll[1].split("=")[1].replace('"',"").replace('"r',"");
let val = "";
if(ll.length > 3){
for (let i = 3; i < ll.length; i++) {
val += ll[i]+"n";
}
}
obj[key] = val.replace("--","").replace("rnn","");
data_out.push(obj);
}
});
return data_out;
}

预期输出

[ { modid: 'IM' }, { token: 'providernagg' }, { cat_type: '3' } ]

Edit:我得到了关于github问题的回复,并且根据"这个包不打算以返回字符串化数据的方式实现toString()。如果我想要规范兼容的FormData,我需要安装前面提到的其他包。所以这不是一个问题,而是一个有意未实现的功能。">

  • formdata-node
  • formdata-polyfill
  • undici

我尝试下面的代码,似乎很好,但不建议,因为它是基于文本分割和过滤,如果文本格式改变,它可能会产生问题。这是相同的沙盒

const FormData = require("form-data");
var data = new FormData();
data.append("modid", "IM");
data.append("token", "provider");
data.append("cat_type", "3");
const objectifyFormdata = (data) => {
return data
.getBuffer()
.toString()
.split(data.getBoundary())
.filter((e) => e.includes("form-data"))
.map((e) =>
e
.replace(/[-]+$/g, "")
.replace(/^[-]+/g, "")
.match(/; name="([^"]+)"(.*)/s)
.filter((v, i) => i == 1 || i == 2)
.map((e) => e.trim())
)
.reduce((acc, cur) => {
acc[cur[0]] = cur[1];
return acc;
}, {});
};
console.log(objectifyFormdata(data));
// { modid: 'IM', token: 'provider', cat_type: '3' }

最新更新