baskerville42
@baskerville42
Учусь работать (Junior)

Почему не возможно прочесть данные из req.body?

Этот кусок кода работал и вдруг перестал работать. Не могу понять в чём причина
router.post('/', function (req, res, next) {
    email.find({email: req.body.email}, function(err, data) {
        if(data[0].email === req.body.email) {
            res.send('Email exist!');
        } else {
            var dbData = new email({email: req.body.email});
            dbData.save(function (err, dbData, affected) {
                res.send(dbData);
                console.log(dbData);
            });
        }
    });
});


Приложение падает с такими логами
app-0 (entire): TypeError: Cannot read property 'email' of undefined
app-0 (entire):     at saveEmail (/var/www/app/routes/index.js:20:19)
app-0 (entire):     at Promise.<anonymous> (/var/www/app/routes/index.js:32:9)
app-0 (entire):     at Promise.<anonymous> (/var/www/app/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
app-0 (entire):     at Promise.emit (events.js:95:17)
app-0 (entire):     at Promise.emit (/var/www/app/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
app-0 (entire):     at Promise.fulfill (/var/www/app/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
app-0 (entire):     at Object.cb (/var/www/app/node_modules/mongoose/lib/query.js:1010:22)
app-0 (entire):     at Object._onImmediate (/var/www/app/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)
app-0 (entire):     at processImmediate [as _immediateCallback] (timers.js:354:15)


UPD
Делайте лишние проверки
Логи ругались на несуществующее свойство email, только я не туда смотрел

email.find({email: req.body.email}, function(err, data) {
        if(data.length !== 0 && data[0].email === req.body.email) {
            res.send('Email exist!');
        } else {
            var dbData = new email({email: req.body.email});
            dbData.save(function (err, dbData, affected) {
                res.send(dbData);
                console.log(dbData);
            });
        }
    });
  • Вопрос задан
  • 3107 просмотров
Решения вопроса 1
@kazmiruk
Странно, что работало раньше и "вдруг" перестало работать. Вообще судя по коду вы используете expressjs. В документации есть такое expressjs.com/4x/api.html#req.body:
"req.body
Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as body-parser and multer."
Т. е. body по умолчанию undefined и его надо заполнить чем-то вроде body-parser.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
SagePtr
@SagePtr
Еда - это святое
Мидлварь туда нужно воткнуть, body-parser
Ответ написан
@ProEvv
можно написать app.use(express.urlencoded({extended: true})) перед роутами
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы