POST 请求的节点获取问题
Node-fetch problems with POST requests
在邮递员中,我可以成功发出这个请求:
并得到这样的回应:
现在我想在 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()
称呼。似乎 API 调用不包含我想要的内容,因为在浏览器中它显示 "size":0
.
我应该怎么做才能解决这个问题?
您需要等待 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 });
在邮递员中,我可以成功发出这个请求:
并得到这样的回应:
现在我想在 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()
称呼。似乎 API 调用不包含我想要的内容,因为在浏览器中它显示 "size":0
.
我应该怎么做才能解决这个问题?
您需要等待 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 });