【问题标题】:Node-fetch problems with POST requestsPOST 请求的节点获取问题
【发布时间】:2018-09-25 06:55:21
【问题描述】:

在邮递员中,我可以成功提出这个请求:

得到这个响应:

现在我想在 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] } } }

由于请求在邮递员中工作得很好,我认为问题在于节点获取,或者我使用它的方式,特别是在fetch() 调用中如何提供body 参数。似乎 API 调用不包含我想要的内容,因为在浏览器中它显示为 "size":0

我应该怎么做才能解决这个问题?

【问题讨论】:

  • node-fetch usage examples 非常清楚地表明您必须至少 JSON.stringify() 正文数据或以其他各种方式传递它。

标签: javascript node.js node-fetch


【解决方案1】:

您需要等待 json。

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

您也可以通过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 });

【讨论】:

  • 可以并且必须使用JSON.stringify,因为node-fetch模块需要它来在POST请求中发送JSON。跨度>
  • 第二次等待,你回答的重点和第一个论点,真的有必要吗?这只是关于 JSON.stringify() 的。
  • @marekful,实际上,这也是必要的,删除它会导致服务器返回一个空的 JSON 对象。
猜你喜欢
  • 2017-08-19
  • 2020-06-08
  • 2018-05-04
  • 2015-03-23
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多