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

希瓦姆·夏尔马

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

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

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

有什么方法可以将我的 formdata 对象转换为可读的、可记录的、最好是 JSO 字符串?

希瓦姆·夏尔马

编辑:我得到了关于提到的 github 问题的回复,并按照“这个包不打算以返回字符串化数据的方式实现 toString()。如果我想要符合规范的 FormData,我需要安装提到了其他软件包。所以这不是问题,而是一个预期的未实现的功能。”


我尝试了下面的代码,看起来不错但不推荐,因为它基于文本拆分和过滤,如果文本格式发生变化,可能会产生问题。这是相同的沙箱

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' }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章