【问题标题】:How can i get a Mongoose custom error message?如何获得 Mongoose 自定义错误消息?
【发布时间】:2021-06-03 10:44:14
【问题描述】:

所以我有想要验证的猫鼬模式

const mongoose = require('mongoose')
const productSchema = new mongoose.Schema({
    name: {
        type: String,
        required: [true, "You Must Include A Name"],
        toLowerCase: true,
    },
    price: {
        type: Number,
        required: [true, "Price Must Be Included"],
        min: 0
    },
  
})
const Product = mongoose.model('Product', productSchema);
module.exports = Product;

在 index.js 中我扩展了 Error 类并编写了这个中间件

app.use((err, req, res, next) => {
    if (err.name == 'CastError') next(new AppError(`This is a CastError${err.message}`, 400))
    else if (err.name == 'ValidationError') next(new AppError(err.message, 400))
    else {
        next(err)
    }
})
app.use((err, req, res, next) => {
    console.log(err.msg)
    const { message = 'Something Went Wrong', status = 500 } = err
    res.status(status).send(message)
})

当我出现验证错误时,我得到以下信息:产品验证失败:价格:必须包含价格 或者当名称和价格都留空时,它会得到:产品验证失败:名称:您必须包含名称,价格:必须包含价格

我只想:“必须包含价格” 或:“必须包含姓名” 我怎样才能做到这一点?

【问题讨论】:

    标签: express validation mongoose


    【解决方案1】:

    在你的 else if 中,将 err.message 解析为你想要发出的消息并使用它。这是在冒号上使用字符串拆分来解析它的一种方法

    else if (err.name == 'ValidationError') {
      const messageParts = err.message.split(':');
      next(new AppError(messageParts[2], 400)
    } else ...
    

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2020-12-05
      • 1970-01-01
      • 2018-08-08
      • 2015-09-22
      相关资源
      最近更新 更多