将表单数据解析为javascript中的对象(无法读取未定义的属性“名称”)

我正在关注here上有关mongodb的教程。这只是一个提交表单,其中将一个人的姓名,年龄和国籍添加到了数据库中。但是我收到以下错误:

  

TypeError:无法读取未定义的属性“名称”

     

在/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',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
sunyuantao123 回答:将表单数据解析为javascript中的对象(无法读取未定义的属性“名称”)

这是因为您没有将主体解析为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

希望这会有所帮助!

本文链接:https://www.f2er.com/3161283.html

大家都在问