Пн goose - «ValidationError: xxx:» при получении JSON тела - PullRequest
0 голосов
/ 14 января 2020

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

SCHEMA

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const activitySchema = new Schema({
    date: { type: String, required: true},
    type: { type: String, required: true},
    text: { type: String, required: true},
    members: { type: String, required: true}
});

const Activity = mongoose.model('Activity', activitySchema);

module.exports = Activity;
ROUTER

router.route('/add').post((req, res) => {
    const dateP = req.body.date;
    const typeP = req.body.type;
    const textP = req.body.text;
    const membersP = req.body.members;
    const newActivity = new Activity({
        date: dateP,
        type: typeP,
        text: textP,
        members: membersP
    });

    newActivity.save()
        .then(() => res.json('Activity added!'))
        .catch(err => res.status(400).json('Error: ' + err));
});

Но когда я отправляю JSON тело через POSTMAN, я получаю следующую ошибку:

"Error: ValidationError: date: Path `date` is required., type: Path `type` is required., text: Path `text` is required., members: Path `members` is required."

И мое тело:

{
    "date": "2020-01-29",
    "type": "Night Course",
    "text": "Biology",
    "members": "Class 9a"
}

Но когда я использую x- www-form-urlencoded с пакетом body-parser, это работает. Что здесь происходит? Почему я не могу получить значение из моего JSON файла?

Редактировать: Я использую анализатор тела:

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(bodyParser.raw());

Но все же, работает только urlencoded ..

1 Ответ

0 голосов
/ 14 января 2020

Если я правильно понял, все работает нормально, если вы используете body-parser, и не работает, если вы его не используете.

Если да, вы, вероятно, получите значение от Postman, но вы в любом случае нужно использовать body-parser.

body-parser анализирует тело вашего запроса и делает его доступным через req.body. Поэтому, если вы не используете его, ваша переменная (dateP, et c ...), вероятно, не определена, что объясняет, почему вы получаете эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...