Express 中间件问题(与 MongoDB 交互)- POST 方法的 req.body 未擦除白色 space 并返回不可用对象错误
Issue with Express middleware (interacting with MongoDB) - POST method's req.body not erasing white space and returning unusable object error
我在使用 Express 时遇到问题req.body(在此应用程序中使用 MongoDB)
这不是路由错误 - GET 方法工作正常,如果我没有验证要求,POST 方法工作。当我使用 POST 路由的 req.body 时会发生此问题。我已经在这里待了几个小时了..请帮忙
这是我的 server.js
const express = require('express');
const app = express()
const mongoose = require('mongoose');
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const groups = require('./routes/api/groups')
// Middleware
app.use(express.urlencoded({extended: true}));
// DB config
const dbURL = require("./config/keys").mongoURI;
// Connect to mongoDB
mongoose.connect(dbURL, {useNewUrlParser: true, useUnifiedTopology: true})
.then(console.log("MongoDB connected..."))
.catch(err => console.log(err))
// Use Routes ** THIS LEADS TO THE SECOND CODE **
app.use('/api/groups', groups)
const port = process.env.PORT || 3500
app.listen(port, ()=> console.log(`Server is listening at port ${port}`))
group.js处理所有组路由
const express = require('express');
const router = express.Router();
const Group = require('../../models/Group')
router.get('/', (req, res) => {
Group.find()
// sort by date descending
.sort({ date: -1})
.then(groups => res.json(groups))
})
router.post('/', (req, res) => {
console.log(req.body)
const newGroup = new Group({
name: req.body.name,
})
newGroup.save( err => {
if (err) {
console.error(err)
} else {
console.log("saved!")
}
})
})
组架构
const mongoose = require("mongoose");
let groupSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
},{
timestamps: true
})
module.exports = mongoose.model("group", groupSchema)
我使用 Postman 发送了一个 POST 请求:
{
"name": "Hello!"
}
我在控制台上收到了这个:来自 console.log(req.body) - router.post 中的第二组代码:
{ '{\n\t"name": "Hello!"\n}': '' }
我认为 express 的中间件(现在包括 body-parser)应该删除空格。验证错误是由于它无法访问 "name" 键。
感谢您抽出时间提供帮助!
正确附加 body-parser:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true})); // content-type: application/x-www-form-urlencoded
app.use(bodyParser.json()); // content-type: application/json
我在使用 Express 时遇到问题req.body(在此应用程序中使用 MongoDB)
这不是路由错误 - GET 方法工作正常,如果我没有验证要求,POST 方法工作。当我使用 POST 路由的 req.body 时会发生此问题。我已经在这里待了几个小时了..请帮忙
这是我的 server.js
const express = require('express');
const app = express()
const mongoose = require('mongoose');
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const groups = require('./routes/api/groups')
// Middleware
app.use(express.urlencoded({extended: true}));
// DB config
const dbURL = require("./config/keys").mongoURI;
// Connect to mongoDB
mongoose.connect(dbURL, {useNewUrlParser: true, useUnifiedTopology: true})
.then(console.log("MongoDB connected..."))
.catch(err => console.log(err))
// Use Routes ** THIS LEADS TO THE SECOND CODE **
app.use('/api/groups', groups)
const port = process.env.PORT || 3500
app.listen(port, ()=> console.log(`Server is listening at port ${port}`))
group.js处理所有组路由
const express = require('express');
const router = express.Router();
const Group = require('../../models/Group')
router.get('/', (req, res) => {
Group.find()
// sort by date descending
.sort({ date: -1})
.then(groups => res.json(groups))
})
router.post('/', (req, res) => {
console.log(req.body)
const newGroup = new Group({
name: req.body.name,
})
newGroup.save( err => {
if (err) {
console.error(err)
} else {
console.log("saved!")
}
})
})
组架构
const mongoose = require("mongoose");
let groupSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
},{
timestamps: true
})
module.exports = mongoose.model("group", groupSchema)
我使用 Postman 发送了一个 POST 请求:
{
"name": "Hello!"
}
我在控制台上收到了这个:来自 console.log(req.body) - router.post 中的第二组代码:
{ '{\n\t"name": "Hello!"\n}': '' }
我认为 express 的中间件(现在包括 body-parser)应该删除空格。验证错误是由于它无法访问 "name" 键。
感谢您抽出时间提供帮助!
正确附加 body-parser:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: true})); // content-type: application/x-www-form-urlencoded
app.use(bodyParser.json()); // content-type: application/json