【问题标题】:Implicit async custom validators (custom validators that take 2 arguments) are deprecated in mongoose >= 4.9.0隐式异步自定义验证器(带 2 个参数的自定义验证器)在 mongoose >= 4.9.0 中已弃用
【发布时间】:2018-11-18 14:02:06
【问题描述】:

我正在使用猫鼬 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,它给定一个字符串值返回它是否有效。

【问题讨论】:

    标签: node.js mongoose validator.js


    【解决方案1】:

    您的自定义验证器中有一个偷偷摸摸的错误。

    validator 库中的isEmail 函数采用 2 个参数,尽管第二个参数是完全可选的。

    isEmail(str [, options])
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:
        //add validator to user model schema 
        
        var validator = require('validator');
        
        validate:{
               validator: (value)=>{
        
                 return validator.isEmail(value);  
        
               },
        
               message:'{VALUE} is not a valid Email'
        
          },
        

        【讨论】:

          【解决方案4】:

          只需复制以下代码即可正常工作

          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' 
               }
            }
          

          【讨论】:

          • 指出问题所在会很有帮助,而不仅仅是过去的代码
          【解决方案5】:

          问题

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

          解决方案

          import validate from 'mongoose-validator'
          
          const isEmail = validate.validatorjs.isEmail
          
          [...]
              email: {
                type: String,
                validate: {
                  validator: value => isEmail(value),
                  message: 'is not valid'
                }
              }
          [...]
          

          【讨论】:

            【解决方案6】:
              var validator = require('validator');
               validate: {
                    validator: (value) => validator.isEmail(value),
                    message: "{VALUE} is not a valid email"
                }  
            

            【讨论】:

            • 请添加一些细节描述,以便任何人一眼就能理解您的答案。
            猜你喜欢
            • 2021-02-09
            • 1970-01-01
            • 1970-01-01
            • 2016-08-13
            • 1970-01-01
            • 2019-11-09
            • 2020-03-06
            • 2014-05-29
            • 2018-01-26
            相关资源
            最近更新 更多