在Express.js中间件中审计

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

我已经想出了几种做法,但对我来说似乎没有什么效率。 现在我只想login到控制台或日志文件,但后来我会看数据存储。

  • 我可以很容易地在API路由中使用“日志”库(如bunyan)来执行此操作。 但是这意味着我必须在任何我想要审计的地方调用日志loggingfunction。
  • 使用片段中给出的中央function来执行日志logging。 这是loggingAPI请求/响应的好方法,但对审计关键信息(如从用户注册审计用户标识)没有帮助。 或者在用户login时审核电子邮件地址。

    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)); 

有没有比这更好的策略? 我已经search了网页,但无法find这样做优雅。