2017-08-03 83 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); 
相關問題