[英]Express 4.17.1 req.body returns undefined
代码分为 2 个文件: 主文件:server.js 路由器文件:user.js 在 user.js 文件中 req.body 返回 undefined 并且不将数据保存到数据库
发送到 /user/register 的数据返回“无法保存到数据库”。 我已经尝试过 bodyParser.json() 和 bodyParser.urlencoded({extended: true}),尽管 express 4.17.x 中不需要它,而且它们不起作用。 其他常见的解决方案,如 app.use(express.json()) 也没有帮助。
服务器.js
const express = require('express')
const mongoose = require('mongoose')
const User = require("./models/userSchema");
const userRouter = require('./routes/user')
const placeRouter = require('./routes/place');
const bodyParser = require('body-parser');
const app = express()
const PORT = 5000
app.use(express.json())
mongoose.connect('mongodb://localhost:27017/instaDB', {
useNewUrlParser: true,
useUnifiedTopology: true
}, () => {
console.log('Connected to Database');
})
app.use('/user', userRouter)
app.listen(PORT, ()=>{
console.log(`Listening on PORT: ${PORT}`);
})
用户.js
const express = require('express')
const User = require("../models/userSchema");
userRouter = express.Router()
userRouter.post('/register', (req, res) => {
const {username, password} = req.body
console.log(req.body.username);
console.log(password);
User.findOne({username}, (err, user) => {
if(err){
res.status(500).json({
err: true,
msgBody: 'Server Error'
})
} if(user){
res.status(400).json({
err: true,
msgBody: 'Username already exists'
})
}
else{
const newUser = new User({
username,
password
})
newUser.save((err)=>{
if(err){
res.status(500).json({
err: true,
msgBody: 'Could not save to database'
})
} else {
res.status(200).json({
err: false,
msgBody: 'Registered Successfully'
})
}
})
}
})
})
module.exports = userRouter;
我猜初始请求缺少 header Content-Type: application/json
。
所以 Express json 解析器会忽略请求正文,因为它没有被键入为 json。
所以解析器不会填充 req.body 字段。
尝试将此 header 与此值( Content-Type: application/json
)添加到您的请求中。
您将如何做到这一点取决于您如何发送此请求( curl、postman、javascript xhr、react/angular...、lib... )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.