我想在没有浏览器的情况下在nodejs中发出post请求,因为它是后端代码。
const formdata = new FormData()
formdata.append('chartfile', file);
但是上面的代码给了我错误
FormData not defined
。
我正在使用 ES6。
谁可以告诉我如何在nodejs中使用FormData?
您可以使用 form-data - npm 模块。
这样使用,
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'));
如果您只需要提交
string
值,而不需要 Buffer
或 ReadStream
,那么 URLSearchParams
可以为您服务!
原始示例
var fs = require('fs');
var form = new URLSearchParams();
form.append('my_field', 'my value');
form.append('my_second_field', 'my value 2');
form.append('my_third_field', 'my value 3');
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
});
FormData
现在是 Node 18 的一部分。他们删除了在 Node 17 中引入的实验性警告:https://github.com/nodejs/node/commit/d33cbabd79
现在您可以将它与
fetch
一起使用,无需任何依赖。
在我看来,不需要额外依赖项的最干净的解决方案是:
const formData = new URLSearchParams({
param1: 'this',
param2: 'is',
param3: 'neat',
})
FormData
是 JS Web API 的一部分(不包含在原生 NodeJS 中)。您可以安装 form-data
软件包。
我建议使用 npm 模块 formdata-node,因为它是 Node.js 的完整(符合规范)FormData 实现。它支持 ESM/CJS 目标,因此支持 EM6。您可以在 npm 模块页面找到一些示例。
node-fetch还导出FormData:
import { FormData } from "node-fetch";
const formdata = new FormData();
formdata.append("chartfile", file);
let _data = new FormData();
_data.append(`FaceDataRecord', '{"faceLibType":"blackFD","FDID":"1","FPID":"${employeeNo}"}`);
_data.append('img', fs.createReadStream('/C:/Users/ALIENWARE/Downloads/unnamed.jpg'));
let _config = {
method: 'put',
maxBodyLength: Infinity,
url: 'http://192.168.1.3/ISAPI/Intelligent/FDLib/FDSetUp?format=json',
headers: {
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'Cookie': 'language=en; WebSession_F82FED6D22=' + cookie,
'Origin': 'http://192.168.1.3',
'Referer': 'http://192.168.1.3/index.asp',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
..._data.getHeaders()
},
data: _data
};
await axios.request(_config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
类型错误:无法读取未定义的属性“名称”