在Express.js中间件中进行审计

时间:2016-10-06 21:31:37

标签: node.js express middleware audit audit-logging

我正在寻找通用的方法来审核我为某些API编写的快速中间件。

我已经提出了几种做法,但似乎没有一种对我有效。目前我只想登录到控制台或日志文件,但稍后我会查看数据存储区。

  • 我可以很容易地使用" logging"库路由如Bunyan在API路由中做到这一点。但这意味着Il必须在我想要审核的任何地方调用日志记录功能。
  • 使用代码段中给出的中心功能进行日志记录。这是记录API的请求/响应的好方法,但在审核关键信息(例如从用户注册审核用户ID)时却没有帮助。或者在用户登录时审核电子邮件地址。

    function auditUserAction(apiFunction) {
    
        function jsonWrapper(funcToWrap, userAction) {
            return function() {
                userAction.jsonResponse = arguments[0];
                return funcToWrap.apply(this, arguments);
            }
        }
    
        return function() {
            req = arguments[0];
            res = arguments[1];
    
            // Overriding json method so we can capture the json response
            res.json = jsonWrapper(res.json, userAction);
            userAction.url = req.url;
            userAction.userId =  req.headers.user_id;
            userAction.referer = req.headers.referer;
            userAction.browserAgent = req.headers['user-agent'];
            result = apiFunction.apply(this, arguments);
            userAction.responseStatusCode = res.statusCode;
            userAction.responseBody = res.body;
            logger.info("Action", userAction);
            return result;
        }
    }
    ..........
    router = require('express').Router();
    router.post('/users', auditUserAction(createUser));
    

有比这更好的策略吗?我在网上搜索过,但无论如何都找不到这样做的优雅。

0 个答案:

没有答案