gpt4 book ai didi

node.js - 使用自定义验证器时 Mongoose 验证错误

转载 作者:可可西里 更新时间:2023-11-01 09:27:26 27 4
gpt4 key购买 nike

以下是无法与自定义验证器一起正常工作的架构-

var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
email : { type: String, validate: lengthValidator },
});

// Length validator for email
var lengthValidator = function(val){
if(val && val.length >= 6 )
return true;
return false;
};

var User = mongoose.model('User',userSchema);

module.exports = User;

错误-

Error: Invalid validator. Received (undefined) undefined. See http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate
at SchemaString.SchemaType.validate (/MY_PROJECT_PATH/node_modules/mongoose/lib/schematype.js:416:13)
at SchemaString.SchemaType (/MY_PROJECT_PATH/node_modules/mongoose/lib/schematype.js:38:13)
at new SchemaString (/MY_PROJECT_PATH/node_modules/mongoose/lib/schema/string.js:24:14)
at Function.Schema.interpretAsType (/MY_PROJECT_PATH/node_modules/mongoose/lib/schema.js:367:10)
at Schema.path (/MY_PROJECT_PATH/node_modules/mongoose/lib/schema.js:305:29)
at Schema.add (/MY_PROJECT_PATH/node_modules/mongoose/lib/schema.js:217:12)
at new Schema (/MY_PROJECT_PATH/node_modules/mongoose/lib/schema.js:73:10)
at Object.<anonymous> (/MY_PROJECT_PATH/models/users.js:2:18)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)

但是,如果我删除 validate,那么它会正常工作,因为我通过将类型从 String 更改为 Number 进行了检查。

让我知道我做错了什么?

最佳答案

您遇到的问题与提升有关。您编写验证函数的方式意味着当您将它传递给模式时,它是一个未定义的值;直到之后才设置变量。

这是问题的一个非常基本的例子。

var thing = {
foo: bar
}

var bar = function () {
alert('hello!');
}

thing.foo();

thing.foo() 被调用时,它会抛出一个错误。为什么?因为这就是 JavaScript 解释我写的内容的方式:

var bar;

var thing = {
foo: bar // At this point, bar is undefined
}

bar = function () {
alert('hello!');
}

thing.foo();

您的代码也发生了同样的事情。当您将架构中的验证属性设置为 lengthValidate 时,它尚未定义。

有两种方法可以修复它。

  1. 在代码中将验证函数定义移到架构定义之上。
  2. 使用 function lengthValidator(val) 代替 var lengthValidator = function(val)

关于node.js - 使用自定义验证器时 Mongoose 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23129162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com