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

我正在尝试使用API​​来更新另一台使用node.js的服务器上的列表。 对于我的最后一步,我需要发送一个包含csv文件的POST。 在API中,它们在FormData下列出,我需要一个名为File的文件和一个Binary Upload的值,然后请求的主体应该由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道调用,你传递请求模块本身。 请参考您的req(...)调用的返回值,并通过这个,而不是

 //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); 

这一行:

 .pipe(fileinclude) 

应该是这样的:

 .pipe(fileinclude()) 

为什么我得到这个错误? dest.on不是一个函数 – 使用gulp-file-include