NodeJS, пн goose: обязательное поле проверки - PullRequest
1 голос
/ 18 марта 2020

Я могу добавить новый элемент в базу данных, если получу правильно отформатированный файл JSON в теле, где каждое обязательное поле содержит что-то. Если значение равно false, сейчас я просто возвращаю JSON файл, подобный этому:

{
    "succes": false
}

Но я также хочу вернуть сообщение об ошибке. Я уже реализовал строку ошибки в модели, но я не знаю, как я могу вытащить это, если блок catch ловит ошибку ...

My добавить новый элемент метод:

exports.addBootcamp = async (req, res, next) => {
    try {
        const bootcamp = await Bootcamp.create(req.body);

        if (!bootcamp) {
            return res.status(404).json({ succes: false });
        }

        res.status(201).json({
            succes: true,
            data: bootcamp
        });
    } catch (err) {
        return res.status(404).json({ succes: false });
    }
};

Начальная часть моей модели:

const BootcampShema = new mongoose.Schema({
    name: {
        type: String,
        required: [true, 'Please add a name'], //first error message
        unique: true,
        trim: true,
        maxlength: [50, 'Name cannot be more than 50 characters']
    },
    slug: String,
    description: {
        type: String,
        required: [true, 'Please add a description'], //second error message
        maxlength: [500, 'Description cannot be more than 500 characters']
    },
    //...etc

Конечно, они находятся в отдельных js файлах, но я могу их экспортировать.

1 Ответ

1 голос
/ 18 марта 2020

В этом случае мы получим ValidationError из базы данных, которая будет инкапсулирована в объекте ошибки. Измените ваш оператор catch так:

try {
// as it is
}
catch (err) {
        return res.status(404).json({
                                      succes: false,
                                      message: err.message
                                    });
}

Mon go db возвращает объект ошибки, как показано ниже. Из этой структуры вы можете извлечь любую информацию и вернуть ее пользователю.

{
    "errors": {
        "name": {
            "message": "Please add a name",
            "name": "ValidatorError",
            "properties": {
                "message": "Please add a name",
                "type": "required",
                "path": "name"
            },
            "kind": "required",
            "path": "name"
        }
    },
    "_message": "Name validation failed",
    "message": "Name validation failed: camera_name: Please add a name",
    "name": "ValidationError"
}

Здесь Пожалуйста, добавьте имя - это тот же текст, который мы ввели в нашей модели.

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