Javascript 使用https.request在nodejs中发送表单数据

Javascript 使用https.request在nodejs中发送表单数据,javascript,node.js,https,Javascript,Node.js,Https,我正试图用我的nodejs服务器向另一台服务器发送一个请求,然后我必须将响应保存在一个文件中。我正在使用nodejs https.request模块 这是我的要求: var formData = new FormData(); formData.append('first',3); formData.append('second', '25'); formData.append('source_file', fs.createReadStream(sourcefi

我正试图用我的nodejs服务器向另一台服务器发送一个请求,然后我必须将响应保存在一个文件中。我正在使用nodejs https.request模块

这是我的要求:

    var formData = new FormData();
    formData.append('first',3);
    formData.append('second', '25');
    formData.append('source_file', fs.createReadStream(sourcefile));
    formData.append('source_image', fs.createReadStream(sourceimage));

var options = {
    hostname: 'ip',
    path: '/api/path',
    method: 'POST'
}
var file = fs.createWriteStream("file.pdf");
var req = https.request(options, (response) => {
    response.pipe(file);
    console.log("File saved");
    response.send("done")
  });

  req.on('error', (e) => {
    console.error(e);
  });

  req.write(formData);
  req.end();
但是我得到了错误

First argument must be a string or Buffer
我尝试使用
formData.toString()
发送我的文件,但使用此选项后,错误消失,但我的文件无法工作,并且我发送了如下数据:

 var formData = new FormData();
formData = {
        first: 3,
        second: '25',
        source_file: fs.createReadStream(sourcefile),
        source_image: fs.createReadStream(sourceimage)
    };
如何使用此请求将文件发送到其他服务器


谢谢

我曾经遇到过类似的问题。我使用NPM上的
表单数据
包和
axios
包解决了这个问题

下面的片段对我有用

const FormData = require("form-data");
const axios = require("axios");

const form = new FormData();
form.append("first", 3);
// other data should go here
form.append("file", fs.createReadStream("filePath"));

axios({
  method: "post",
  url: "url",
  data: form,
  headers: { ...form.getHeaders() }
});

您可以使用节点内置的
主体解析器
模块将表单数据解析为JSON和 你必须使用
app.use(bodyParser.json());//用于解析application/json
use(bodyParser.urlencoded({extended:true}))
当您执行
req.body
时,它会将您的表单数据转换为对象表单。

我假设您正在使用。 要修复
第一个参数必须是字符串或缓冲区
错误替换:

请求写入(formData);
请求结束();

formData
的行为类似于Node.js)

您还应向请求中添加标题:

var options = {
    hostname: 'ip',
    path: '/api/path',
    method: 'POST',
    headers: formData.getHeaders()
}

源:

您没有设置请求头。尝试了此头:{“内容类型”:“多部分/formdata”}无效。我是否必须将其与toString()一起发送?您是否可以添加用于提供
FormData
FormData.pipe(req)的模块保存了我的一天。:)
var options = {
    hostname: 'ip',
    path: '/api/path',
    method: 'POST',
    headers: formData.getHeaders()
}