如何为所有路由定义快速中间件

时间:2016-09-08 12:58:32

标签: node.js express connect

我正在尝试定义一个适用于我的应用程序的所有路由的全局中间件。我试过一些方法,但仍然遇到了一些问题。

var _gMDLW = function (req, res, next) {
  if(req.route) console.log('Called route ', req.route.path);
  next();
}

// Working fine and result on _gMDLW is /route1
app.get('/route1', _gMDLW, function (req, res, next) { return res.sendStatus(200); })


var globalRouter = new express.Router()

// Working fine and result on _gMDLW is /view
globalRouter.route('/view')
  .get(_gMDLW, function (req, res, next) { return res.sendStatus(200);})
app.use(globalRouter);

但问题在这里

// Error in _gMDLW and getting /list instead of /items/list
var itemRouter = new express.Router()
itemRouter.route('/list')
  .get(_gMDLW, function (req, res, next) { return res.sendStatus(200);})
app.use('/items', itemRouter)

第二个问题是,有没有办法在_gMDLW内定义/添加app,而不是在每条路线中添加类似app.use(_gMDLW)的内容?

谢谢

1 个答案:

答案 0 :(得分:0)

  

您可以使用app.all()来解决此问题

实施例

app.all('*', _gMDLW);

function _gMDLW(req, res, next) {
    if (req.path == '/') return next();// redirect to homepage for guest

    next();//authenticated user
}

您可以根据需要进行修改