将额外参数传递给Express中的路由处理程序

时间:2015-01-18 03:24:21

标签: node.js express

我对Express来说相对较新,而且我正在寻找一种让路由更具可重用性的方法。在我的应用程序中,我将有很多路径可以传递给通用处理程序,但会有不同的模板。

示例:

app.get('/about', function(req, res) {
    res.render('about.html');
});

app.get('/', function(req, res) {
    res.render('home.html');
});

虽然这个例子很懊悔,但我有30多条这样的路线。我希望能做的是这样的事情:

app.get('/about', generic.render('about.html'));

或以其他方式以某种方式将模板名称传递给返回res.render的函数。这在Express中是否可行?我尝试解决这个问题导致变量未定义。

我宁愿不做这样的事情,紧密耦合我的路线参数和模板名称:

app.get('/:template', function(req, res) {
    res.render(req.params.template + '.html');
});

2 个答案:

答案 0 :(得分:8)

你可以制作一个简单的中间件来为你做这件事。例如:

function simpleRender(file, opts) {
  opts || (opts = {});
  return function(req, res) {
    res.render(file, opts);
  };
}

然后就像使用它一样:

app.get('/about', simpleRender('about.html'));

app.get('/', simpleRender('home.html'));

答案 1 :(得分:1)

我是这样做的:

const handler = (req, res, template) => {
  res.render(template)
}

app.get('/about', (req, res) => {
  handler(req, res, 'about.html')
})