CNode

sequelize 上遇到的一些坑

分享
Tthomas0836发布于10 年前最后回复10 年前6 回复6669 浏览0 收藏
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)

X
XadillaX#1·10 年前

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

I
im-here#2·10 年前

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

T
thomas0836#3·10 年前
引用 XadillaX这不是 Sequelize 的坑啊。 这是箭头函数的特性。

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

S
sweetvvck#4·10 年前

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

T
thomas0836#5·10 年前
引用 sweetvvck@thomas0836 这里不能用箭头函数,sequelize 的 model 在定义的时候并没有指向它实例的变量😳; 可以说 sequelize 实现 getter/setter 的这种写...

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

参与回复
登录后即可参与回复。登录