javascript - 如何在 Express.js 中共享 Controller 之间的通用逻辑?

标签 javascript node.js express

我是用 express 建站的,我有一个特殊的要求,我把路由器设置如下:

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

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

home page 之间只有一些不同之处。和 racing list page . 我处理公共(public)逻辑的方法如上。homeRacingHandle函数根据变量isHome来决定渲染哪个页面。

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

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

最佳答案

你可以使用柯里化(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
    }
}

关于javascript - 如何在 Express.js 中共享 Controller 之间的通用逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005685/

相关文章:

sql - 两个用不同语言编写的程序可以连接到同一个 SQL 数据库吗?

node.js - EJS和Node,如果传入的对象不存在,EJS会抛出错误?

javascript - 使用带有空输入 js 的 shift

javascript - 有没有一种方法可以在渲染器过程中保存/写入文本文件而无需在VueJs中打开对话框?

javascript - 如何在Javascript中创建数组之间的主/从关系?

node.js - angular2-rc1 http.post 无法正常工作

node.js - Node 中的 WebGL 与 Fabric.js

typescript - 如何在TypeScript Express服务器中将字符串解码/编码为base64

javascript - 单独(组织)快速路线

Javascript 计时器只是分钟和秒