Node.js 使用自定义验证器时出现Mongoose验证错误
以下是无法正确使用自定义验证器的架构-Node.js 使用自定义验证器时出现Mongoose验证错误,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,以下是无法正确使用自定义验证器的架构- 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
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();
同样的事情也发生在你的代码上。当您将架构中的validate属性设置为lengthValidate
时,尚未定义该属性
有两种方法可以解决这个问题
function lengthValidator(val)
代替var lengthValidator=function(val)
@MatthewTole我没有收到任何错误,但也没有进行验证。这是一种方法,但我得到的只是“尝试”,即使我的电子邮件长度为2,您也不能多次调用
res.send
,第一次调用将结束响应。@MatthewTole现在我在注释res.send('try')后得到一个空白数组[]
代码>这可能是因为您没有得到任何结果。是的,但我认为它应该在发送到db之前首先进行验证。因为只有模式验证似乎是相关的,即我应该在错误中得到错误的响应