如何在帆中的myRequestLogger中间件中获取目标控制器和动作名称?

时间:2017-02-02 06:36:27

标签: node.js sails.js

我希望在sails http.js myRequestLogger自定义中间件中请求路由控制器和操作名称。

2 个答案:

答案 0 :(得分:2)

尝试req.options.controllerreq.options.action

答案 1 :(得分:1)

类似于下面的中间件可以记录控制器/操作,中间件必须在router之前,并在end请求事件上记录日志。

仅打印控制器/操作,如果定义了一个,如果是静态文件,404等,则可能无法定义。

middleware: {

  order: [
    ...
    'logController',
    'router',
    ...
  ],

  logController: function(req, res, next) {
    req.on("end", function() {
      sails.log.info('logController##Options2:', req.options); // This contains controller/action along with other data
    });
    sails.log.info('logController##Options1:', req.options); // undefined
    next();
  },
}

日志:

RequestLogger##Options1: undefined
...
RequestLogger##Options2: { detectedVerb: { verb: '', original: '/', path: '/' },
  skipRegex: [],
  _middlewareType: 'CORS HOOK: sendHeaders',
  controller: 'user',
  action: 'list',
  locals: { layout: 'layout' } }

请记住,请求可以匹配多个路由,例如

'/user/list': 'UserController.list',
'user/:id': 'UserController.detail',

控制器可以调用其第三个参数next来移动到下一个匹配的控制器/动作。