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
仍然没有填充正文内容。
我正在尝试学习 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
仍然没有填充正文内容。