我正在关注 here 上的 mongodb 教程。这只是一个提交表单,其中将一个人的姓名、年龄和国籍添加到数据库中。但我收到以下错误:
TypeError: Cannot read property 'name' of undefined
at /home/me/Desktop/nodejs/mongoose-example/index.js:24:18
所以看起来它不想将 req.body 解析为 personInfo。程序如下:
const express = require('express');
const app = express();
app.set('view engine', 'pug');
app.set('views', './views');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');
var personSchema = mongoose.Schema({
name: String,
age: Number,
nationality: String
});
var Person = mongoose.model("Person", personSchema);
app.get('/person', function(req, res){
res.render('person');
});
app.post('/person', function(req, res){
var personInfo = req.body; // Get the parsed information
if (!personInfo.name || !personinfo.age || !personInfo.nationality){
res.render('show_message', {
message: "Sorry, you provided wrong info", type: "error"});
} else {
var newPerson = new Person({
name: personInfo.name,
age: personInfo.age,
nationality: personInfo.nationality
});
newPerson.save(function(err, Person){
if(err)
res.render('show_message', {message: "Database error", type: "error"});
else
res.render('show_message', {
message: "New person added", type: "success", person: personInfo});
});
}
});
app.listen(3000);
这是 person.pug:
html
head
title Person
body
form(action = "/person", method = "POST")
div
label(for = "name") Name:
input(name = "name")
br
div
label(for = "age") Age:
input(name = "age")
br
div
label(for = "nationality") Nationality:
input(name = "nationality")
br
button(type = "submit") Create new person
最佳答案
这是因为您没有将正文解析为 JSON 格式。要解析它,您必须在获取和发布路由之前包含一个中间件。您可以像这样解析正文:-
app.use(express.json({limit: '5mb'})); //for parsing json
app.use(express.urlencoded({ extended: true,limit: '5mb' })); //for parsing x-ww-form-
urlencoded request bodies
希望这有帮助!
关于javascript - 在javascript中将表单数据解析为对象(无法读取未定义的属性 'name'),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58707094/