Синтаксический анализ данных формы для объекта в javascript (Невозможно прочитать свойство 'имя' из неопределенного) - PullRequest
1 голос
/ 05 ноября 2019

Я следую учебному пособию по mongodb с здесь . Это просто форма отправки, в которой имя, возраст и национальность человека добавляются в базу данных. Но я получаю следующую ошибку:

TypeError: Невозможно прочитать свойство 'name' из неопределенного

в /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);

А вот персона.пуг:

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

1 Ответ

0 голосов
/ 06 ноября 2019

Это потому, что вы не анализируете тело в формате 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

Надеюсь, это поможет!

...