如何解决UnhandledPromiseRejectionWarning: TypeError: 无法解构“req.body”的属性“name”,因为它是未定义的
我目前正在尝试学习 MERN Stack Web 开发。我遇到了一个不寻常的问题。 所以我尝试使用 Postmate 尝试将数据从正文输入到数据库。从 server.js 文件执行此操作时,它会起作用,但是当我尝试从其他文件执行此操作时,控制台将无法识别输入的数据
这是我的控制器文件(当我控制台记录 req.body 时,它只返回 undefined)
import express from 'express';
import mongoose from 'mongoose';
import StudentsData from '../models/students.js';
const router = express.Router();
export const createStudent = async (req,res) => {
const { name } = req.body;
console.log(req.body);
const newStudentsData = new StudentsData({ name });
try {
await newStudentsData.save();
res.status(201).json( newStudentsData );
} catch (error) {
res.status(409).json({ message: error.message });
}
}
这是我的路由文件
import express from 'express';
import { createStudent,getStudents,deleteStudent,updateStudent } from '../controllers/students.js';
const router = express.Router();
router.post('/insertdata',createStudent);
export default router;
这是我的模型文件
import mongoose from 'mongoose';
const studentsSchema = mongoose.Schema({
name: String,email: String,roll_no: Number,gender: String
});
const studentsData = mongoose.model('studentsData',studentsSchema);
export default studentsData;
这是我的 server.js 文件
import mongoose from 'mongoose';
import express from 'express';
import bodyParser from 'body-parser';
import router from './routes/students.js';
const app = express();
app.use('/students',router);
app.use(express.json());
app.use(bodyParser.json({ limit: "30mb",extended: true}));
app.use(bodyParser.urlencoded({ limit: "30mb",extended: true}));
mongoose.connect("mongodb+srv://merntutor:merntutor123@cluster0.txjnr.mongodb.net/myFirstDatabase?retryWrites=true&w=majority",{
useNewUrlParser: true,useUnifiedTopology: true,useCreateIndex: true,})
.then(() => {
console.log("DB CONNECTED");
});
const PORT = 8000;
app.listen(PORT,() => {
console.log(`app is running at ${PORT}`);
});
在正文上,我输入了
{
"name": "test"
}
解决方法
请在 app.use(express.json());
文件中的 app.use('/students',router);
前写 server.js
。 express.json()
中间件应该在所有路由之前运行。
另外,您是否认为您需要 bodyParser
,因为 .json()
和 .urlencoded()
现在已经可用于 express ?
为什么 console.log(req.body) 如果您已经分配 const {name} 中的值,您不应该console.log(名称) 我认为希望对你有用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。