Express Router.Post不在邮递员上发回Json

问题描述 投票:0回答:1

我正在尝试学习表达方式以及如何使用邮递员,我正在按照教程进行操作。一切都进行得很好,直到我通过向服务器发送虚拟数据来测试router.get为止。我使用邮递员尝试将其发布到我的本地主机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"
  }
}
javascript api express postman router
1个回答
0
投票

路由是按顺序处理的,因此,如果要使正文解析器中间件对.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仍然没有填充正文内容。

© www.soinside.com 2019 - 2024. All rights reserved.