2017-08-03 48 views
1

我正在尝试使用API​​来更新另一台使用node.js的服务器上的列表。对于我最后一步,我需要发送一个包含csv文件的POST。在API中,它们在FormData下列出,我需要一个名为File的文件和一个二进制上传的值,然后请求的主体应该由listname:name和file:FileUpload组成。如何使用node.js请求模块发送文件?

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

我是一个老前辈的JavaScript的HTML和CSS,但这是我第一次冒险与后端node.js.我一直得到的错误是:TypeError: dest.on is not a function

从我可以告诉,这与我使用的方式form.pipe(req)但我找不到文档告诉我适当的用法。如果你没有直接的答案,那么可以指点一下正确的文档。

回答

2

的问题是你没有请求传递实例到您的管道呼叫,你通过重新任务模块本身。就拿你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); 
相关问题