如何使用 node.js 请求模块发送文件?

How do I send a file with node.js request module?

我正在尝试使用 API 更新另一台服务器上使用 node.js 的列表。对于我的最后一步,我需要发送一个包含 csv 文件的 POST。在 API 中,他们在 FormData 下列出我需要一个名为 file 的 Key 和一个 Binary Upload 的 Value,然后请求的主体应该由 listname: name 和 file: FileUpload.

function addList(token, path, callback) {

//Define FormData and fs
var FormData = require('form-data');
var fs = require('fs');

//Define request headers.
headers = {
    'X-Gatekeeper-SessionToken': token,
    'Accept': 'application/json',
    'Content-Type': 'multipart/form-data'
};

//Build request.
options = {
    method: 'POST',
    uri: '{URL given by API}',
    json: true,
    headers: headers
};

//Make http request.
req(
    options,
    function (error, response, body) {
        //Error handling.
        if (error) { callback(new Error('Something bad happened')); }

        json = JSON.parse(JSON.stringify(response));
        callback.call(json);
    }
);

//Attempt to create form and send through request
var form = new FormData();
form.append('listname', 'TEST LIST');
form.append('file', fs.createReadStream(path, { encoding: 'binary' }));
form.pipe(req);};

对于 html 和 css,我是前端 javascript 的老手,但这是我第一次接触后端 node.js。我不断收到的错误是:TypeError: dest.on is not a function

据我所知,这与我使用 form.pipe(req) 的方式有关,但我找不到说明正确用法的文档。如果您没有直接的答案,请指点正确的文档,我们将不胜感激。

这一行:

.pipe(fileinclude)

应该是这样的:

.pipe(fileinclude())

来自

问题是您没有将请求 实例 传递到您的管道调用中,而是传递了请求模块本身。引用 req(...) 调用的 return 值并传递它,即

//Make http request.
const reqInst = req(
   options,
   function (error, response, body) {
       //Error handling.
       if (error) { callback(new Error('Something bad happened')); }

       json = JSON.parse(JSON.stringify(response));
       callback.call(json);
   }
);

//Attempt to create form and send through request
var form = new FormData();
...
form.pipe(reqInst);