POST 请求正文在 Express 中间件中不可用 'req'

POST request body not available in Express middleware 'req'

我有一个奇怪的问题让我很困惑。

我创建了这个 Express 中间件:

const express = require('express')
const bodyParser = require('body-parser')
var router = express.Router()
router.use(bodyParser.urlencoded({ extended: false }))
router.use(bodyParser.json())
app.use(router)

router.use((req, res, next) => {
  console.log(req.body)
})

router.post((req, res) => {
  ...
})

无论何时我尝试在 router.post 中记录正文,它都会记录正确的正文。但是,当我尝试在 router.use 中记录它时(如上所示),它只是 returns 一个空对象。关于如何将主体放入中间件的任何想法?谢谢!

根据官方文档我看到的唯一问题是你必须在声明所有中间件后将路由器设置为应用程序,如下图所示,

这意味着您的代码应更改为

const express = require('express')
const bodyParser = require('body-parser')
var router = express.Router()
router.use(bodyParser.urlencoded({ extended: false }))
router.use(bodyParser.json())

router.use((req, res, next) => {
  console.log(req.body)
})

router.post((req, res) => {
  ...
})

//setting the router as a middleware after declaring all the routes and middleware functions.
app.use(router)

参考文献:

  1. Express Routing
  2. Express Router API