web-dev-qa-db-fra.com

Problèmes d'extraction de nœud avec les demandes POST

En facteur, je peux réussir cette demande:

enter image description here

Et obtenez cette réponse:

enter image description here

Maintenant, je veux faire la même demande dans mon fichier server.js dans node.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)
  }
})

Ça ne marche pas. Voici ce qui apparaît dans le navigateur lorsque je vais sur localhost: 5000/api/sentimenttest:

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

et voici la sortie de la console:

 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] } } }

Étant donné que la demande fonctionne très bien dans postman, je pense que le problème est lié à l'extraction de nœuds ou à la façon dont je l'utilise, en particulier la façon dont le paramètre body est fourni dans l'appel fetch() . Il semble que l'appel API ne contienne pas ce que je veux, car dans le navigateur, il dit "size":0.

Que dois-je faire pour résoudre ce problème?

11
Sahand

Vous devez attendre json.

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

Vous pouvez également faire une demande avec JSON.stringify() pour le corps. Et il sera plus facile de gérer votre objet js. Comme ça:

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