在进行任何验证之前,MongooseJS清理字符串

时间:2015-08-24 15:33:34

标签: javascript mongoose

在进行任何类型的验证之前,我需要在MongooseJS中清理一个字符串。如何访问模型的字段并更改(清理)字段,然后才能对字段进行验证?

例如,这就是我的模型:

var NotificationSchema = new Schema({
    topic: { type: String, required: true }
});

我想要清除topic(从中移除任何空格字符)。完成之后,我想检查topic是否最少2个字符,最多60个字符。

简单地说,我希望首先清理主题。

1 个答案:

答案 0 :(得分:1)

如果您只想验证已转换的数据,可以使用自定义验证。 http://mongoosejs.com/docs/validation.html

var NotificationSchema = new Schema({
    topic: { type: String, required: true }
});

NotificationSchema.schema.path('topic').validate(function (value) {
  value = value.replace(/\s/g, '');
  if (value.length > 1 && value.length < 61)
    return true;
  return false;
}, 'Invalid length');

如果您还想保存转换后的数据,可以使用预保存挂钩进行转换。您仍然需要进行自定义验证,因为Mongoose没有内置的字符串长度支持。请参阅此处了解中间件文档:http://mongoosejs.com/docs/middleware.html

var NotificationSchema = new Schema({
    topic: { type: String, required: true }
});

NotificationSchema.pre('validate', function(next) {
  this.topic = this.topic.replace(/\s/g, '');
  next();
});

NotificationSchema.schema.path('topic').validate(function (value) {
  if (value.length > 1 && value.length < 61)
    return true;
  return false;
}, 'Invalid length');