使用node-fetch发起POST请求遇问题,Postman可正常调用
解决Node.js调用Sentiment140 API的问题
看起来你在Postman里能正常发起请求拿到结果,但用node-fetch实现时踩了坑,我帮你梳理下代码里的问题,再给你修正后的版本:
问题排查
你的代码里有几个关键错误,这也是用fetch调用JSON接口时的常见误区:
- 请求体没转成JSON字符串:fetch的
body参数如果传对象,服务端根本解析不了,必须用JSON.stringify()转成字符串格式 - 缺少必要的请求头:得告诉服务端你发的是JSON数据,也就是设置
Content-Type: application/json - 直接返回了Response对象:fetch返回的是一个Response实例,不是接口的真实响应数据,得调用
.json()方法解析后才能拿到结果
修正后的完整代码
const fetch = require('node-fetch') const SEN_URL = "http://www.sentiment140.com/api/bulkClassifyJson" app.get('/api/sentimenttest', async (req, res) => { try { // 配置请求参数,补全请求头并转换请求体格式 const apiResponse = await fetch(SEN_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ "data": [ {"text": "I love you"}, {"text": "I hate you"} ] }) }) // 解析响应为JSON格式 const sentiments = await apiResponse.json() console.log("情感分析结果:", sentiments) // 用res.json()返回JSON响应,比res.send()更适配API场景 res.json(sentiments) } catch (error) { // 别忘了捕获异常,给前端返回友好的错误信息 console.error("调用情感分析API失败:", error) res.status(500).json({ error: "请求情感分析服务出错,请稍后重试" }) } })
额外小提示
- 如果你还没装node-fetch,记得执行
npm install node-fetch@2(v3版本是ESM模块,CommonJS环境下用v2更省心) - Postman里可以直接把成功的请求转成node-fetch代码:点击请求右上角的「Code」按钮,选择「Node.js - node-fetch」,就能直接拿到正确的代码模板,对比着改会更高效
内容的提问来源于stack exchange,提问作者Sahand
相关产品推荐
相关产品推荐

