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