NodeJS,猫鼬:必填字段验证

时间:2020-03-18 13:01:33

标签: node.js mongoose

如果我在正文中的每个必填字段均包含某些内容的情况下得到了格式正确的JSON文件,则可以向数据库中添加新项目。如果为假,那么现在我只返回一个JSON文件,如下所示:

{
    "succes": false
}

但是我也想返回一条错误消息。我已经在模型中实现了错误字符串,但是如果catch块捕获到错误,我不知道如何解决这个问题。

我的添加新项方法:

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 个答案:

答案 0 :(得分:1)

在这种情况下,我们将从数据库中获取一个 ValidationError ,该错误将封装在错误对象中。 将您的catch语句修改为以下内容:

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

Mongo 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"
}

此处请添加名称与我们在模型中输入的文字相同。