node.js - 枚举的 Mongoose 模型自定义错误消息

标签 node.js mongodb validation enums mongoose

我想自定义我的 Mongoose 模型生成的验证消息。

我倾向于不将我的验证(例如必需的)直接放在架构对象上,因为没有自定义错误消息的自由。 例如

sourceAccountId: {
  type: Schema.ObjectId,
  require: true,
  ref: 'Account'
}

相反,我执行以下操作。

sourceAccountId: {
  type: Schema.ObjectId,
  ref: 'Account'
}

ConnectionRequestSchema.path('sourceAccountId').required(true, 'Source Account is required.');

当字段具有枚举约束时,我无法找到覆盖默认枚举消息的方法。

下面列出了我的模型,状态验证消息对于 required 工作正常,但不适用于 enum。

'use strict';

var _ = require('lodash');

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

var ConnectionRequestSchema = new Schema({
  created_at: { type: Date },
  updated_at: { type: Date },

  sourceAccountId: {
    type: Schema.ObjectId,
    ref: 'Account'
  },

  status: {
    type: String,
    enum: ['pending', 'accept', 'decline'],
    trim: true
  }
});

// ------------------------------------------------------------
// Validations
// ------------------------------------------------------------

ConnectionRequestSchema.path('sourceAccountId').required(true, 'Source Account is required.');
ConnectionRequestSchema.path('status').required(true, 'Status is required.');
//ConnectionRequestSchema.path('status').enum(['pending', 'accept', 'decline'], 'Status is invalid, valid values include [pending, accept, decline]');

// ------------------------------------------------------------
// Save
// ------------------------------------------------------------

ConnectionRequestSchema.pre('save', function (next) {
  var now = new Date().getTime();

  this.updated_at = now;
  if (!this.created_at) {
    this.created_at = now;
  }

  next();
});

module.exports = mongoose.model('ConnectionRequest', ConnectionRequestSchema);

最佳答案

试试类似的东西:

var enu = {
  values: ['pending', 'accept', 'decline']
, message: 'Status is required.'
}


var ConnectionRequestSchema = new Schema({
  ...

  status: {
    type: String
  , enum: enu
  , trim: true
  }
});

关于node.js - 枚举的 Mongoose 模型自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403907/

相关文章:

java - 如何使用椭圆验证框架验证数组?

c# - 我可以在自定义 ConfigurationSection 上使用 IntegerValidator 属性指定范围吗?

node.js - Sequelize nodejs 返回平面 JSON

javascript - 从客户端接收消息并将消息发送到 Node js服务器

node.js - 用双引号替换 .toString() 单引号

django - 通过 Django 后端和 Angular 前端删除 MongoDB 集合中的所有文档

python - 如何使用 Python 和 MongoDB 跳过不存在的键而不出现 KeyErrors

node.js - Mongoose 总是插入第一个文档并跳过预保存 Hook

html - Total Validator 找不到跳过链接

javascript - Jest 单元测试函数抛出错误