如果我创建了一个数据库支持的路由中间件来检查一些数据,并且我希望它现在传递给视图/渲染中间件,那么我最好的方法是什么?
我是不是该:
- 将我获取的数据附加到请求对象并将我的渲染层设置为链中的下一个?
- 直接调用渲染层就好像我自己的路由器像中间件一样调用它?
- 也许还有其他建议?
我正在寻找一些通用的架构建议,这些建议可以帮助我确保我创建的每个功能组件最终不会变得不可维护且规模庞大。我读过的一些内容倾向于将事物分解为尽可能多的模块,这让我认为上面的两个选项可能很好。
但也许一个更好,或者我缺少什么?
如果您使用快速路由,鼓励重用和简单的可靠架构如下所示:
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');
}