微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UnhandledPromiseRejectionWarning: TypeError: 无法解构“req.body”的属性“name”,因为它是未定义的

如何解决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.jsexpress.json() 中间件应该在所有路由之前运行。

另外,您是否认为您需要 bodyParser,因为 .json().urlencoded() 现在已经可用于 express ?

,

为什么 console.log(req.body) 如果您已经分配 const {name} 中的值,您不应该console.log(名称) 我认为希望对你有用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。