2017-06-16 12 views
1

request.postを実行しようとすると、次のエラーが発生します。私のオプションのbodyを最初に参照しているようですが、最初の引数についての不平は文字列またはバッファでなければならないので混乱します。ノード内のrequest.postは{code:undefined、reason: 'Argument error、options.body'をスローします。 }

{ code: undefined, reason: 'Argument error, options.body.' } DOH! _http_outgoing.js:454 throw new TypeError('first argument must be a string or Buffer'); ^ TypeError: first argument must be a string or Buffer

私は文字列にurl値を変更しようとしたが、それはそれを修正しません。

私のコードは次のようになります。ご覧のとおり、私はreqOptionsをログアウトし、URLが確実にrequest.postに渡されていることを確認しましたので、問題の内容がわかりません。どんな助けでも乾杯!

var reqOptions = { 
    url: options.host, 
    body: formData, 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
    } 
    }; 
    console.log('CHECK OPTIONS :: ', reqOptions); 
    request.post(reqOptions, function (err, resp) {...} 
+0

'formData'がオブジェクトである、['ボディ: 'オプション]場合は'だけでなく 'formData' –

+1

のJSON.stringify(FORMDATAを)'してみてください(https://www.npmjs.com/package/request#requestoptions-callback)は、その値が既に準備されているか/文字列/バッファにフォーマットされていることを期待しています。代わりに '' form: '](https://www.npmjs.com/package/request#forms)を使用して、'要求 'にURLエンコードされたオブジェクトをフォーマットしてみてください。 –

+0

素早い応答のために乾杯。あなたは正しいですが、 'body'キーを' form'に変更するとエラーを取り除きました。それを回答として提出しますか? – mikeym

答えて

1

formDataがオブジェクトである場合は、おそらくrequest年代form: optionの代わりbody:を使用したいと思います。それはオブジェクトをストリング化し、Content-Typeヘッダーを設定します。

var reqOptions = { 
    url: options.host, 
    form: formData 
}; 
console.log('CHECK OPTIONS :: ', reqOptions); 
request.post(reqOptions, function (err, resp) {...}); 

body:オプションは、文字列、バッファ、またはReadStreamのいずれかである値を期待。 form:を使用せずに、オブジェクトを自分でストリング化する必要があります。

var qs = require('querystring'); 

var reqOptions = { 
    url: options.host, 
    form: qs.stringify(formData), 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded' 
    } 
}; 
関連する問題