Express.js 中间件中的审计

nix*_*get 6 audit middleware node.js express audit-logging

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

我想出了几种方法,但对我来说似乎没有那么有效。现在我只想登录到控制台或日志文件,但稍后我将查看数据存储。

  • 我可以很容易地在 API 路由中使用“日志记录”库(例如 bunyan)来执行此操作。但这意味着我必须在我想审计的任何地方调用日志记录功能。
  • 使用诸如代码段中给出的中央函数来进行日志记录。这是记录 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));
    
    Run Code Online (Sandbox Code Playgroud)

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