Sequelize在钩子中获取请求数据?

时间:2015-11-25 08:18:24

标签: javascript node.js express sequelize.js

我正在尝试在创建,更新和删除调用时为我的模型存储一些日志数据。我想在请求中存储请求中的一些数据以及一些用户数据(使用express.js)。

在钩子中我有一些用于记录的模块。

hooks: {
    afterCreate: function (order, options, done) {
        // How to get user data stored in express request.

        return app.log.set('event', [{message: 'created', data: order, userId: 1}, done]);
    }
}
...

模块只是在表格中记录。然而,这是我遇到麻烦的userId部分。我正在使用passport模块并将其存储在请求中,那么如何将模型挂钩中的用户对象(或任何外部对象)获取?

我希望避免在控制器或其他任何地方执行此操作,因为可能存在一些脚本或其他可能也会输入数据的命令。

1 个答案:

答案 0 :(得分:1)

我也遇到过类似的问题,我自己解决了这个问题:

首先:我宣布了一个全局(通用)钩子:

module.exports = sequelize.addHook('beforeCreate',
  function(model, options, done) {//hook 2
    //handle what you want
    //return app.log.set('event', [{message: 'created', data: order,      userId: 1}, done]);
});

然后,在调用模型之前,使用调用挂钩(beforeCreatebeforeBulkUpdate,...)并分配参数请求

module.exports = {
  CreateUser: function(req, res) {
    User.beforeCreate(function(model, options, done) {//hook1
        model.request = req;
    });
    User.create({
            id: 1,
            username: 'thanh9999',
            password: '31231233123'
                //ex.....
        })
        .then(function(success) {
            //response success
        }, function(err) {
            //response error
        });
   }
};

命令挂钩调用:hook declaration in model→挂钩1→挂钩2`。

此外,您还必须为每个模型声明挂钩。 See more information here.