如何使查询结果可以从所有页面访问

我试图能够通过一个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理订单。