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

使用Express内置body parser时请求无限加载无响应如何解决?

问题原因
  • 核心原因:Express.json 是Express提供的用于生成JSON解析中间件的工厂函数,代码中没有调用该函数,而是直接将函数本身作为中间件注册。正确用法是调用这个函数返回中间件实例,即需要写为Express.json()。直接传递Express.json的情况下,该函数接收到req、res、next参数后不会执行JSON解析逻辑,也不会调用next()将请求传递给后续路由,导致请求被永久挂起,出现无限加载的情况,这也符合你停用body parser后请求恢复正常的表现。
  • 次要问题:POST接口的逻辑中,数据库操作成功后仅调用了res.status(200),没有调用res.send()、res.end()、res.json()等方法主动结束响应,即便body parser的问题修复后,POST请求仍然会出现无限加载的问题。
解决方法

修复后的完整代码如下:

const Express = require("express")
const db = require("./database")

const app = Express()

// 修复1:调用Express.json()生成中间件实例
app.use(Express.json())

app.get("/api", ((req, res) => {
  res.status(200).send("The API is working")
}))

app.post("/api/user/:id/settings",(req, res) => {
  console.log("It works")
  db.edit({user: req.params.id}, req.body, "user")
    .then(() => {
      // 修复2:设置状态码后调用send方法主动结束响应,可根据业务需求自定义返回内容
      res.status(200).send({success: true, message: "配置更新成功"})
    })
    .catch(err => {
      res.status(500).send(err)
      console.error(err)
    })
})

app.listen(3000)
console.log("API is ready")

修改点说明:

  • 把app.use(Express.json)改为app.use(Express.json()),正确注册JSON解析中间件,请求会正常流转到后续路由,同时可以正常获取req.body的内容
  • 把POST接口成功回调里的res.status(200)改为res.status(200).send(返回内容),主动结束响应,避免请求挂起

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:51:03