Node.js POST接口报错:Unexpected token u in JSON at position 0 求助
排查Node.js POST接口中"Unexpected token u in JSON at position 0"错误
这个错误我太熟了——它几乎百分百是因为你尝试JSON.parse()的内容是undefined,毕竟"u"正是undefined的首字符。咱们来一步步拆解你的代码问题,搞定这个bug:
1. 核心问题:错误的参数传递与请求体处理
你定义的callback函数看起来是为request这类HTTP客户端库设计的(需要error、response、body三个参数),但你直接把Express的req请求对象传进去了!这就导致callback里的body参数是undefined,自然JSON.parse(body)就会抛出那个"Unexpected token u"的错误。
而且在Express中处理POST JSON请求,必须先添加express.json()中间件,否则req.body会是undefined——这也是你出错的关键原因之一。
2. 额外的代码问题
- 变量作用域错误:你在
callback内部定义的objectItems,在外部的console.log根本访问不到,运行时会报objectItems is not defined的错误。 - 语法错误:代码里的括号匹配混乱,比如
callback定义后多了一个});,导致整个代码结构失效。
修正后的代码示例
首先,确保你的Express应用添加了JSON解析中间件(这一步绝对不能忘):
const express = require('express'); const app = express(); // 启用JSON请求体解析,没有这个,req.body就是undefined app.use(express.json());
然后重构你的POST接口:
app.post('/', (req, res) => { try { // 经过express.json()解析后,req.body已经是现成的JSON对象,不需要再JSON.parse const objectItems = req.body._items[0]; console.log(objectItems); // 这里写你的MySQL数据插入逻辑... res.status(200).json({ message: '数据提交成功', data: objectItems }); } catch (error) { console.error('处理请求出错:', error); res.status(400).json({ error: '请求格式错误或数据无效' }); } });
如果你是在调用外部API
如果你的callback是用来处理第三方API的响应(而不是解析当前请求的body),那应该把逻辑调整成这样(以request库为例):
const request = require('request'); app.post('/', (req, res) => { // 调用外部API request('https://your-external-api-url.com', (error, response, body) => { if (error) { return res.status(500).json({ error: '调用外部API失败' }); } try { const object = JSON.parse(body); const objectItems = object._items[0]; console.log(objectItems); // 执行MySQL写入操作... res.status(200).json({ data: objectItems }); } catch (parseError) { console.error('解析外部响应出错:', parseError); res.status(400).json({ error: '外部API响应格式错误' }); } }); });
最后检查Postman设置
别忘了确认你的POST请求配置:
- 在Body标签下选择
raw,然后格式选JSON - 输入的JSON内容要合法,比如没有多余的逗号、引号配对正确
内容的提问来源于stack exchange,提问作者Sofia
相关产品推荐
相关产品推荐

