我正在尝试对猫鼬模式中的字段运行验证过程。但是,“ this”变量的行为与预期的不同。因为根据http://mongoosejs.com/docs/validation.html#update-validators-and-this中的文档,这应该引用要保存的模板的对象。但是,在VsCode中调试时,对此的本地引用是正确的,但是,“观察者”所指向的引用是模块的另一个类引用。谁能告诉我为什么会这样?在这种情况下,如何访问正确的参考? VsCode Debug
答案 0 :(得分:0)
因为您使用arrow function
来定义验证方法:
箭头函数表达式的语法比函数表达式短,并且没有自己的
this
,arguments
,super
或{{1 }}。这些函数表达式最适合非方法函数,并且不能用作构造函数。
答案 1 :(得分:0)
源代码已更改为可以使用功能。
const valOwnerId = function(value) {
let self = this;
let callback = (resolve, reject) => {
Company.findOne({ numberId : value }).then( (company) => {
if (company && (company.ownerId.toString() != self.ownerId.toString())) {
throw new Error('Esta companhia já está cadastrada para outro usuário.');
} else {
return resolve(true);
}
}, (error) => {
reject(error);
});
};
return new Promise(callback);
}
schema.path('numberId').validate( valOwnerId, 'Number ID `{VALUE}` is not valid.');