如何在没有浏览器的 node.js 中使用 FormData?

Posted

技术标签:

【中文标题】如何在没有浏览器的 node.js 中使用 FormData?【英文标题】:How to use FormData in node.js without Browser? 【发布时间】:2020-12-14 00:50:47 【问题描述】:

我想在没有浏览器的nod​​ejs中发出一个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?的主要内容,如果未能解决你的问题,请参考以下文章

在公共 JS 文件中使用 Node.js

Node.js 中 For 循环中的 async.waterfall

Node.js 中 For 循环中的 async.waterfall

如何使用node.js捕获正在运行的计算机主机的桌面屏幕

如何使用node.js捕获正在运行的计算机主机的桌面屏幕

使用 Express 限制对 Node.js 的访问