mongoose> = 4.9.0中不推荐使用隐式异步自定义验证器(带有2个参数的自定义验证器)

时间:2017-03-18 18:00:45

标签: node.js mongoose validator.js

我使用的是mongoose 4.9.0。虽然下面的代码有效,但我收到如下警告:

  

(node:24769)DeprecationWarning:隐式异步自定义验证程序   (带有2个参数的自定义验证器)在mongoose> = 4.9.0中已弃用。有关详细信息,请参阅http://mongoosejs.com/docs/validation.html#async-custom-validators

我怀疑错误来自模型验证器。

const mongoose = require('mongoose');
const isEmail = require('validator/lib/isEmail');

const Schema = mongoose.Schema;

const userSchema = new Schema({
  email: {
    type: String,
    unique: true,
    required: true,
    validate: [{ validator: isEmail, msg: 'Invalid email.' }],
  },
});

module.exports = mongoose.model('User', userSchema);

我似乎唯一的自定义验证器是来自validator库的isEmail,它给出了一个字符串值,返回它是否有效。

6 个答案:

答案 0 :(得分:10)

您的自定义验证程序中存在一个偷偷摸摸的错误。

来自isEmail库的

validator函数有2个参数,即使第二个参数完全是可选的。

isEmail(str [, options])

你可以通过在它上面创建一个函数来防止猫鼬看到它:

validate: [{ validator: value => isEmail(value), msg: 'Invalid email.' }]

答案 1 :(得分:4)

根据mongoose文档,您可以通过将验证程序的isAsync属性设置为false来删除警告。 Mongoose假设所有接受两个参数的函数都是异步的

validate: [{ isAsync:false, validator: isEmail, msg: 'Invalid email.' }]

http://mongoosejs.com/docs/validation.html#async-custom-validators

答案 2 :(得分:2)

//add validator to user model schema 

var validator = require('validator');

validate:{
       validator: (value)=>{

         return validator.isEmail(value);  

       },

       message:'{VALUE} is not a valid Email'

  },

答案 3 :(得分:0)

只需复制以下代码即可正常运行

email: {
    type: String,
    required : true,
    lowercase : true,
    unique:true,
    validate: { 
    validator:function validateEmail(email) {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
},   message: '{email} Invalid' 
     }
  }

答案 4 :(得分:0)

问题

settings.py

import validate from 'mongoose-validator'

[...]
    email: {
      type: String,
      validate: validate({
        validator: 'isEmail',
        message: 'is not valid',
      })
    }
[...]

答案 5 :(得分:0)

  var validator = require('validator');
   validate: {
        validator: (value) => validator.isEmail(value),
        message: "{VALUE} is not a valid email"
    }