sequelize 上遇到的一些坑
发布于 8 年前 作者 thomas0836 5885 次浏览 来自 分享
var User = db.define('user', {
    username: {type: Sequelize.STRING, allowNull: false, unique: 'compositeIndex'},
    password: {type: Sequelize.STRING, allowNull: false, },
    lastAt: {type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW,},
    roleType: {
        type:   Sequelize.INTEGER,
        allowNull: false,
        defaultValue: Enumeration.roleType[3].value,

    },
},{
    indexes: [
        // Create a unique index on username,password
        {
            unique: true,
            fields: ['username','password']
        }
    ],
    getterMethods   : {
        roleTypeTitle : function() { return Enumeration.roleType[this.roleType].title },
        lastAtFormat : function() { return tools.formatDate(this.lastAt) },
        createdAtFormat: function() { return tools.formatDate(this.createdAt) },
        updatedAtFormat: function() { return tools.formatDate(this.updatedAt) },
    },
})

var User = db.define('user', {
    username: {type: Sequelize.STRING, allowNull: false, unique: 'compositeIndex'},
    password: {type: Sequelize.STRING, allowNull: false, },
    lastAt: {type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW,},
    roleType: {
        type:   Sequelize.INTEGER,
        allowNull: false,
        defaultValue: Enumeration.roleType[3].value,

    },
},{
    indexes: [
        // Create a unique index on username,password
        {
            unique: true,
            fields: ['username','password']
        }
    ],
    getterMethods   : {
        roleTypeTitle : () => Enumeration.roleType[this.roleType].title,
        lastAtFormat :  () =>  tools.formatDate(this.lastAt) ,
        createdAtFormat:  () => tools.formatDate(this.createdAt) ,
        updatedAtFormat:  () => tools.formatDate(this.updatedAt) ,
    },
})

以上两段代码,折腾了一个晚上,第二段代码 使用es6的写法, 里面的this 对象 和 第一段代码中的this 对象不一样的。

请问,这里的getterMethods 如果用 es6的 写法,怎样去获取原来的那个this?

5 回复

这不是 Sequelize 的坑啊。 这是箭头函数的特性。

这不是 Sequelize 的坑啊。 这是箭头函数的特性。

@xadillax 我知道是 他的特性啊,当前代码块外的作用域为this嘛, 我的问题是 Sequelize 的这部分就不能用 箭头函数了吗?如果想用箭头函数,这里 怎样才可以获取到 Sequelize 的 实例对象

@thomas0836 这里不能用箭头函数,sequelize 的 model 在定义的时候并没有指向它实例的变量😳; 可以说 sequelize 实现 getter/setter 的这种写法就是利用 function 中 this 变化的特点; 另外这里有提到这个问题的 issue

@sweetvvck thx 刚用 koa2 有了解的吗? 在做 登录 验证 ,session 处理 这些,有推荐的 开源项目参考吗?moajs 那个 感觉坑不小…… 而且东西不全……

回到顶部