如何在Express.js中共享控制器之间的通用逻辑?

时间:2015-10-08 02:39:29

标签: javascript node.js express

我曾使用快递建立我的网站,我有一个特殊的要求。我已将路由器设置如下:

/* home */
app.get('/', function (req, res, next) {
    homeRacingHandle(req,res);
});

/* racing list */
app.get('/racing',function (req, res, next) {
    homeRacingHandle(req,res);
});

home pageracing list page之间只有几个不同之处。 我处理公共逻辑的方法如上所述。homeRacingHandle函数根据变量isHome来决定要呈现的页面。

    var location = req.path.split('?').toString();
    var isHome = location==='/' && true || false;

这种方法适合我。但我不知道是否有一个好的处理方法。还有其他最佳实践吗?

1 个答案:

答案 0 :(得分:2)

您可以使用currying来简化此

curryHomeRacing = require('./handler');

/* home */
app.get('/', curryHomeRacing('home'));

/* racing list */
app.get('/racing', curryHomeRacing('racing'));

在另一个文件handler.js

//in handler.js

module.exports = function curryHomeRacing(route){
    return function(req, res) {
        homeRacingHandle(req, res, route);
    };
}

function homeRacingHandle(req, res, route) {
    if (route === 'home') {
        //do home stuff
    } else if (route === 'racing') {
        //do racing stuff
    }
}