我正在尝试学习表达方式以及如何使用邮递员,我正在按照教程进行操作。一切都进行得很好,直到我通过向服务器发送虚拟数据来测试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"
}
}
路由是按顺序处理的,因此,如果要使正文解析器中间件对.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
仍然没有填充正文内容。