2015-11-25 22 views
1

我正在嘗試在創建,更新,刪除調用時爲我的模型存儲一些日誌數據。我想在請求中存儲請求中的一些數據以及一些用戶數據(使用express.js)。Sequelize通過鉤子獲取請求數據?

在鉤子中,我有一些記錄模塊。

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

我也遇到了類似的問題,我自己解決其如下:

第一:我宣佈全球(通用)掛鉤:

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,...)和分配PARAM請求

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.

+0

雖然周圍的''req''通過是一個工作和透明的解決方案,我覺得它很奇怪和煩人,只是爲了記錄。您可能想要查看continuation-local-storage(https://www.npmjs.com/package/continuation-local-storage)來存儲數據,以便每個「logger.log」函數都可以訪問任何地方它被稱爲。從理論上講,它應該在實踐中工作 - 從未嘗試過。 – tiblu