该变量在Mongoose + Nodejs的验证中的行为

时间:2018-07-25 22:14:13

标签: javascript mongoose visual-studio-code

我正在尝试对猫鼬模式中的字段运行验证过程。但是,“ this”变量的行为与预期的不同。因为根据http://mongoosejs.com/docs/validation.html#update-validators-and-this中的文档,这应该引用要保存的模板的对象。但是,在VsCode中调试时,对此的本地引用是正确的,但是,“观察者”所指向的引用是模块的另一个类引用。谁能告诉我为什么会这样?在这种情况下,如何访问正确的参考? VsCode Debug

2 个答案:

答案 0 :(得分:0)

因为您使用arrow function来定义验证方法:

  

箭头函数表达式的语法比函数表达式短,并且没有自己的this argumentssuper或{{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.');