2017-08-03 17 views
1

node.jsを使用して別のサーバーのリストを更新するAPIを使用しようとしています。最後のステップとして、csvファイルを含むPOSTを送信する必要があります。 APIではFormDataの下にfileという名前のKeyとBinary Uploadの値が必要であるとリストされていれば、要求の本文は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

から:

.pipe(fileinclude) 

は、このであるべきパイプコール、あなたは再を通過しているクエストモジュールそのもの。あなたのreq(...)呼び出しの戻り値への参照を取り、これを渡す代わりに、すなわちOPがとても `fileinclude`ミドルウェアも式に来ていないがぶ飲みを使用していない

//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); 
関連する問題