合作中间件的首选架构是什么?

时间:2013-01-10 02:18:11

标签: node.js express connect

如果我创建了一个数据库支持的路由中间件来检查某些数据,我希望它现在传递给一个视图/渲染中间件,那么我最好的方法是什么?

我应该:

  • 将我提取的数据附加到请求对象,并将我的渲染层设置为链中的下一个?
  • 直接调用渲染层,好像我自己的路由器像中间件一样调用它?
  • 也许还有其他一些建议?

我正在寻找一些通用的架构建议,可以帮助我确保我创建的每个功能组件都不会变得不可维护和大。我读过的一些东西都倾向于把东西分成尽可能多的模块,这让我觉得上面两个选项可能都不错。

但是也许一个更好或者我缺少什么?

1 个答案:

答案 0 :(得分:2)

如果您正在使用快速路由,那么鼓励重用和简单的可靠架构如下所示:

app.use(errorHandler); // errorHandler takes 4 arguments so express calls it with next(err)
app.get('/some/route.:format?', checkAssumptions, getData, sendResponse);

...其中checkAssumptions,getData和sendResponse只是示例 - 您可以根据应用程序的需要制作更长或更短的路径链。这些功能可能如下所示:

function checkAssumptions(req, res, next) {
  if (!req.session.user) return next(new Error('must be logged in'));
  return next();
}

function getData(req, res, next) {
  someDB.getData(function(err, data) {
    if (err) return next(err);
    // now our view template automatically has this data, making this method reusable:
    res.localData = data;
    next();
  });
}

function sendResponse(req, res, next) {
  // send JSON if the user asked for the JSON version
  if (req.params.format === 'json') return res.send(res.localData);

  // otherwise render some HTML
  res.render('some/template');
}