在模型验证中获取this.id返回未定义

时间:2019-07-05 19:15:08

标签: javascript node.js sequelize.js

在字段的验证中,我得到this作为undefined,但是即使我在Sequelize.define的第三个参数中设置使用documentation描述的其他字段,也会发生同样的情况

module.exports = function (sequelize, DataTypes) {

const User = sequelize.define(
    'User', 
    {...}, //all fields here
    {
        freezeTableName: true,
        paranoid: true,
        validate: {
            isPasswordRepeated: () => {
                console.log(this.id, this.password);
            }
        }
    }
);

}

在此代码中,console.log输出undefined undefined。如果我使用密码的验证,仍然为undefined获得this.id,但通过参数接收密码。 我一直在寻找解决方案,但这似乎是一个罕见的问题,仅在GitHub上找到this abandoned issue。还有另一种获取this.id的方法吗?

Sequelize版本4.42.0

1 个答案:

答案 0 :(得分:2)

您不了解“ this”的上下文。

  

在函数内部,此值取决于函数的方式   叫。

     

...

     

由于以下代码不在严格模式下,并且由于   这不是由调用设置的,它将默认为全局对象,即   是浏览器中的窗口。

     

...

     

但是,在严格模式下,如果在输入时未设置此值   执行上下文,它保持未定义状态。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this#Function_context