如何在没有浏览器的 node.js 中使用 FormData?
Posted
技术标签:
【中文标题】如何在没有浏览器的 node.js 中使用 FormData?【英文标题】:How to use FormData in node.js without Browser? 【发布时间】:2020-12-14 00:50:47 【问题描述】:我想在没有浏览器的nodejs中发出一个post请求,因为它是后端代码。
const formdata = new FormData()
formdata.append('chartfile', file);
但是上面的代码给了我FormData not defined
的错误。
我正在使用 ES6。
谁能告诉我如何在nodejs中使用FormData?
【问题讨论】:
【参考方案1】:您可以使用form-data - npm 模块。因为formData()
不是 NodeJS API
这样用,
var FormData = require('form-data');
var fs = require('fs');
var form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
【讨论】:
感谢您的回答。我正在使用 ES6,所以我像这样导入:import FormData from 'form-data'
但我收到错误form_data_1.default is not a contructor
如果是nodejs,只能var FormData = require('form-data');
nodejs不支持ES6语法导入。
我正在使用 esm 模块来使用 ES6 语法。
试试import * as FormData from form-data
谢谢。我收到另一个错误source.on is not a function
。抱歉我的问题很糟糕【参考方案2】:
FormData
是 JS Web API 的一部分(不包含在本机 NodeJS 中)。您可以安装 form-data
包。
【讨论】:
谢谢。你能告诉我如何在 ES6 语法中使用该模块吗?import * as FormData from "form-data";
对我来说这是有效的:import default as FormData from "form-data";
【参考方案3】:
不需要 npm 模块,URLSearchParams
做同样的事情!
原始示例
var fs = require('fs');
var form = new URLSearchParams();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
Axios 示例
const formData = new URLSearchParams();
formData.append('field1', 'value1');
formData.append('field2', 'value2');
const response = await axios.request(
url: 'https://example.com',
method: 'POST',
headers: 'Content-Type': 'application/x-www-form-urlencoded',
data: formData
);
【讨论】:
【参考方案4】:我建议使用 npm 模块 formdata-node,因为它是 Node.js 的完整(符合规范)FormData 实现。它同时支持 ESM/CJS 目标,因此支持 EM6。您可以在npm module page 找到一些示例。
【讨论】:
以上是关于如何在没有浏览器的 node.js 中使用 FormData?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 中 For 循环中的 async.waterfall