web-dev-qa-db-ja.com

POSTリクエストでのノードフェッチの問題

郵便配達で、私は正常にこのリクエストを行うことができます:

enter image description here

そして、この応答を取得します。

enter image description here

ここで、node.jsのserver.jsファイルで同じリクエストを実行します。

_const fetch = require('node-fetch')
const SEN_URL =  "http://www.sentiment140.com/api/bulkClassifyJson" // URL of sentiment analysis
app.get('/api/sentimenttest', async (req, res) => {
  try{
    var sentiments = await fetch(SEN_URL, {method: "POST", body: {"data": [{"text": "I love you"}, {"text": "I hate you"}]}})
    console.log(sentiments)
    res.send(sentiments)
  }catch(error){
    console.log(error)
  }
})
_

これは機能しません。 localhost:5000/api/sentimenttestにアクセスすると、ブラウザーに次のように表示されます。

_{"size":0,"timeout":0}
_

コンソール出力は次のとおりです。

_ Response {
   size: 0,
   timeout: 0,
   [Symbol(Body internals)]: 
    { body: 
       PassThrough {
         _readableState: [ReadableState],
         readable: true,
         _events: [Object],
         _eventsCount: 2,
         _maxListeners: undefined,
         _writableState: [WritableState],
         writable: false,
         allowHalfOpen: true,
         _transformState: [Object] },
      disturbed: false,
      error: null },
   [Symbol(Response internals)]: 
    { url: 'http://www.sentiment140.com/api/bulkClassifyJson',
      status: 200,
      statusText: 'OK',
      headers: Headers { [Symbol(map)]: [Object] } } }
_

リクエストは郵便配達員でうまく機能するため、問題はノードフェッチ、またはそれを使用する方法、具体的にはbodyパラメーターがfetch()呼び出しで提供される方法にあると思います。ブラウザーでは_"size":0_と表示されるため、API呼び出しには必要なものが含まれていないようです。

これを修正するにはどうすればよいですか?

11
Sahand

あなたはjsonを待つ必要があります。

_var sentiments = await fetch(SEN_URL, {method: "POST", body: {"data": [{"text": "I love you"}, {"text": "I hate you"}]}})
//Here 
await sentiments.json()
_

また、bodyにJSON.stringify()を使用してリクエストを行うこともできます。そして、jsオブジェクトの管理が簡単になります。このような:

_var data = {data: [{text: "I love you"}, {text: "I hate you"}]};
var body = JSON.stringify(data);
var sentiments = await fetch(SEN_URL, { method: "POST", body: body });
_
6
Grynets