node express,如何在所有页面侧边栏添加文章归档功能?

最近在用express+art模板引擎开发一个博客,想在侧边栏添加一个文章归档、标签页的功能。大概这样

日期分类是通过查询筛选处理 然后渲染到模板引擎,由于前台所有页面需要访问,我就在访问路由前加了一个中间件,将日期处理好发送给全局变量

const dateList = await Article.find({}, {createdDate: 1}).sort({createdDate: -1})

const archive = []
dateList.forEach(item => {
  archive.push(dayjs(item.createdDate).format('YYYY-MM'))
})

res.locals.archives = Array.from(new Set(archive))
next()
{{each archives}}
  <li><a href="/category/{{$value.split('-')[0]}}/{{$value.split('-')[1]}}" class="text-muted">{{$value}}</a></li>
{{/each}}

这样缺点是每次访问路由都要调用这个查询,感觉很浪费性能,有没有可以只在首次加载页面的时候调用一次的方法,或者更好的解决方案。感觉我的方法太笨了,自学确实有太多不懂的地方

还遇到一个问题,在中间件中使用 res.locals 模板页面可以接收到值,req.app.locals 就接收不到(路由中我是这样写的),不太清楚什么区别

阅读 2.1k
1 个回答

关于归档,可以直接维护一个json文件或者redis缓存来处理。启动服务时重置数据。
每次新增文章,修改,删除时再处理该数据即可。

locals问题感觉这篇写的比较容易理解。链接

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题