如何使查询结果可以从所有页面访问
我试图能够通过一个variables传递给我的模板,我可以让它为单个页面工作,但我需要find一种方法来访问它的任何页面的结果。 原因是它是需要我的侧边栏是一个模板的一部分。
我的模板是
include header include sidebar content include footer
这只是sudo代码,显然不是我的实际代码。
我需要包括的查询是:
Item.count({"author.id":req.user.id}, (err, itemCount)=>{ if(err){ console.log(err); } else { var Count = JSON.stringify(itemCount); // somehow I need to store Count to be accessible inside my sidebar } });
我知道我可以把每个路由查询,但有没有办法,我可以做只有login的用户,并把它放在中间件或东西或sorting?
我现在把它存储在每个路由中,但我知道这不是DRY代码,更新它将是一个巨大的痛苦,因为我有超过50个我处理的路线。
我典型的路线是:
// dashboard app.get('/dashboard', setRender('dashboard/index'), setRedirect({auth: '/login'}), isAuthenticated, (req, res, next) => { }, dashboard.getDefault);
您可以为此使用中间件,即:
app.use('*', (req, res, next) => { Item.count({"author.id":req.user.id}, (err, itemCount)=>{ if(err){ console.log(err); res.status(500).send(err); } else { req.Count = JSON.stringify(itemCount); next(); } }); });
这将在所有路由中执行您的查询并将结果保存在req.Count
。 如果您只想在某些路线中执行此操作,请修改您希望匹配的path的'*'
部分。 另外,您可能希望将其他中间件function(如isAuthenticated
提取到自己的app.use
子句中,以便更准确地pipe理订单。