快递路线DRY代码

时间:2014-08-21 17:26:14

标签: express

我正在创建具有相同功能的多条路线。是否有更好的DRY方法来创建这些路径,而不是像我下面那样复制和粘贴它们?

app.get('/adminoverviews', function(req, res, next){
  if(!req.isAuthenticated()) {
      res.status(403);
      res.redirect('/login');
      res.end();
    }else{
      next();
    } 
},function(req, res) {
        res.render('index.ejs',{
          bootstrappedUser: req.user,
          page: 'admin'

        })
    }); 
app.get('/adminoverviews/:id', function(req, res, next){
  if(!req.isAuthenticated()) {
      res.status(403);
      res.redirect('/login');
      res.end();
    }else{
      next();
    } 
},function(req, res) {
        res.render('index.ejs',{
          bootstrappedUser: req.user,
          page: 'admin'

        })
    }); 

1 个答案:

答案 0 :(得分:1)

我首先将authenticate分隔到它自己的声明中

var authenticate = function(req, res, next) {
  if(!req.isAuthenticated()) {
      res.status(403);
      res.redirect('/login');
      res.end();
    } else {
      next();
    }
}

如果/adminoverviews/adminoverviews/:id的路线功能不同:

app.get('/adminoverviews', authenticate, function(req, res) {

}

app.get('/adminoverviews/:id', authenticate, function(req, res) {

}

否则,您可能会执行与authenticate

相似的操作

您可能需要使用:id进行一些验证。我建议使用router.paramhttp://expressjs.com/api#router.param