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

How to make query results accessible from all pages

我试图将一个变量传递到我的模板,我可以让它在单个页面上工作,但我需要找到一种方法来在任何页面中访问它的结果。原因是我的边栏需要它作为模板的一部分。

我的模板是

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
 }
});

我知道我可以接受查询并将其放入每条路由中,但是有没有一种方法可以只对登录用户执行此操作并将其放入中间件或类似的东西中?

我目前将它存储在每条路线中,但我知道它不是 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 中。如果您希望它只在特定的一组路由中执行,请修改 '*' 部分以匹配您想要匹配的任何路径。此外,您可能希望将 isAuthenticated 等其他中间件功能提取到它们自己的 app.use 子句中,以便您可以更准确地管理订单。