You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决MERN栈开发中UnhandledPromiseRejection报错问题?

报错原因

你遇到的SyntaxError: Unexpected token o in JSON at position 1错误,核心诱因是后端代码中对已经完成解析的请求体做了重复的JSON解析操作:

  1. 前端发送的请求头携带了Content-Type: application/json,只要你的Express服务注册了express.json()中间件,就会自动将传入的JSON格式请求体解析为JavaScript对象,此时req.body已经是可直接使用的对象类型
  2. 你在接口代码第一行执行了JSON.parse(req.body),JSON.parse方法要求接收字符串类型参数,当传入对象时会先隐式将对象转为字符串"[object Object]",解析该字符串时索引位置1的字符是o,和报错信息完全匹配
  3. 额外还有一处语法错误:pool.query调用时,SQL语句字符串和参数数组之间缺失了逗号,也会触发后续报错
解决方案
  • 直接删除接口中多余的JSON解析行:const body = JSON.parse(req.body),后续直接使用req.body取值即可
  • 确认Express主入口文件(一般是index.js)中,在注册路由前已经添加了JSON解析中间件:
// 必须放在app.use('/api/user', userRouter)这类路由注册代码之前
app.use(express.json())
  • 修复pool.query的语法错误,补全SQL语句和参数数组之间的逗号:
const newUser = await pool.query(
    "INSERT INTO User_ (username, email, password, firstname, lastname, country_code, phone_no,  address, city, state, country) VALUES ($1, $2, $3, $4,$5, $6, $7, $8, $9, $10, $11) RETURNING user_id, username",
    [username, email, hashed_password, firstname, lastname, country_code, phone_no,  address, city, state, country]
);
  • 建议在接口的catch块中添加错误响应,避免前端请求超时:
catch(err){
    console.log("Error : ", err);
    res.status(500).json({error: err.message})
}

内容的提问来源于stack exchange,提问作者SMEET KOTHARI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 19:21:03