Javascript 未处理的PromisejectionWarning:TypeError:无法分解属性';名称';属于';要求正文';因为它是未定义的

Javascript 未处理的PromisejectionWarning:TypeError:无法分解属性';名称';属于';要求正文';因为它是未定义的,javascript,mongodb,express,mern,body-parser,Javascript,Mongodb,Express,Mern,Body Parser,我目前正在尝试学习MERN Stack web开发。我遇到了一个不寻常的问题。 所以我尝试使用Postmate将数据从尸体输入数据库。当从server.js文件执行此操作时,它会工作,但当我尝试从其他文件执行此操作时,控制台将无法识别输入的数据 这是我的控制器文件(当我控制台记录req.body时,它只返回未定义的) 这是我的文件 import express from 'express'; import { createStudent, getStudents, deleteStudent,

我目前正在尝试学习MERN Stack web开发。我遇到了一个不寻常的问题。 所以我尝试使用Postmate将数据从尸体输入数据库。当从server.js文件执行此操作时,它会工作,但当我尝试从其他文件执行此操作时,控制台将无法识别输入的数据

这是我的控制器文件(当我控制台记录req.body时,它只返回未定义的)

这是我的文件

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"
}
为什么console.log(req.body)如果您已经分配了const{name}中的值,那么console.log(name) 这就是我想的,希望它对您有任何用处

请编写
app.use(express.json())
应用程序之前使用('/students',router)
server.js
文件中
express.json()
中间件应该在所有路由之前运行


另外,您是否认为您需要
bodyParser
as,并且现在已经可以使用express了?

似乎name在
newstudentsdata({name})中获得了双括号?name已经是一个对象,如
req.body.name={“name”:“test”}
但它有一个对象括号,如
{{“name”:“test”}
哦,是的。我的错,我刚刚纠正了它,错误仍然发生,因为app.use(bodyParser…)没有在控制器文件中使用(应该解析哪个json对象),所以
req.body
不是未定义的吗?我以前试过,它也在终端上输出未定义的。问题是,程序无法从控制器文件中获取带有req body的body的数据,而可以从服务器获取数据。请尝试在控制器文件alsoAh中添加body解析器中间件。我试过你的第一个建议,现在它起作用了。我不太明白你在第二句话中的意思。你能详细说明一下吗?或者现在这个程序可以运行了吗?哦,你能解释一下它是如何工作的吗?不久前,我在youtube上做了一个类似的程序,代码没有使用
app.use(express.json())
syntaxWith-Express,您不需要
bodyParser
作为单独的中间件。Express为您提供了
Express.json()
Express.urlencoded()
{
    "name": "test"
}