Express Router.Post 不通过 Postman 发回 Json

Express Router.Post not sending back Json on Postman

我正在尝试学习 express 以及如何使用 postman,我正在学习教程。一切顺利,直到我通过向服务器发送虚拟数据来测试 router.get。我使用 postman 尝试 post 到我的本地主机 500。我没有得到我发送的数据的 json 返回,而是得到 200 状态并且底部没有任何内容我的屏幕。当我在到达该路线时检查控制台时,这会记录到控制台:http://undefined/api/members.

请注意,我使用 router.get 接收所有成员的 json 没有问题,并且仅通过搜索成员 ID 接收 json 也没有问题。但是出于某种原因 router.post 对我不起作用。我怀疑这与正文解析器有关。但我不确定为什么它不起作用。请帮忙。

这是我设置应用程序文件的方式:

const express = require('express')
    const app = express()
    const path = require('path');
    const logger = require('./middleware/logger')
    const bodyParser = require('body-parser')



    app.use(logger)

    app.use('/api/members', require('./routes/api/members'))

    app.use(bodyParser.json())

    app.use(bodyParser.urlencoded({extended: false}))

    app.use(express.static(path.join(__dirname, 'public')))



    const PORT = process.env.PORT || 5000
    app.listen(PORT, () => {
        console.log(`Server started on port ${[PORT]}`)
    })

以下是我设置路由器文件的方法

const express = require('express')
const router = express.Router()
const members = require('../../Members')


router.get('/', (req, res) =>{
    res.json(members);
})


router.get('/:id', (req, res) => {
    const found = members.some(member => member.id === parseInt(req.params.id));

    if(found){
    res.json(members.filter(member => member.id === parseInt(req.params.id)))
    } else { 
        res.status(400).json({msg: `No member with the id of ${req.params.id}`})
    }
})


router.post('/', (req, res) => {
    res.send(req.body)
})



module.exports = router 

我的package.json:

{
  "name": "expressCrashCourse",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index",
    "dev": "nodemon index"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "moment": "^2.24.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.2"
  }
}

路由是按顺序处理的,所以如果你想让 body-parser 中间件为你的 .post() 路由激活,中间件必须在它之前。所以,改变这个:

app.use('/api/members', require('./routes/api/members'))

app.use(bodyParser.json())

app.use(bodyParser.urlencoded({extended: false}))

对此:

app.use(bodyParser.json())

app.use(bodyParser.urlencoded({extended: false}))

app.use('/api/members', require('./routes/api/members'))   // <== after your middleware

事实上,在中间件有机会 运行 之前它已经到达您的路线,因此 req.body 仍然没有填充正文内容。