tooltricks.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var express = require('express');
  2. var router = express.Router();
  3. const models = require('../models');
  4. const config = require('../config/app');
  5. const redis = require('../libs/redis');
  6. const categories = require('../config/category');
  7. const { tags, tagsHashMap, getTagSeoTitle, getTagSeoDescription, getTagH1Title } = require('../config/tag');
  8. const languages = require('../config/language');
  9. const translate = require('../config/translate');
  10. const meta = require('../config/meta');
  11. const utils = require('../libs/utils');
  12. const DailyFactory = require('../models/daily-factory');
  13. const datefns = require('date-fns');
  14. const { format } = require('date-fns');
  15. const { getListBuilder } = require('../libs/pager');
  16. const CACHE_PREFIX = "tooltricks_v1";
  17. // const CACHE_EXPIRES = 60; // 60s刷新一次
  18. const CACHE_EXPIRES = 600;
  19. // tools-tricks
  20. router.get('/', function (req, res, next) {
  21. (async function () {
  22. let cacheKey = `${CACHE_PREFIX}_${req.originalUrl}`;
  23. let htmlData = await redis.getAsync(cacheKey);
  24. if (!htmlData) {
  25. let lang = utils.lang.ensureLanguage(req.params.lang);
  26. if (!req.cookies.lang || req.cookies.lang != lang) {
  27. res.cookie('lang', lang, config.cookie);
  28. }
  29. let title = 'titletitle';
  30. let description = 'description-description';
  31. let data = {
  32. title,
  33. description,
  34. languages,
  35. translate,
  36. lang,
  37. uri: req.originalUrl,
  38. };
  39. // 渲染EJS模板到内存中
  40. res.render('article', data, async (err, html) => {
  41. if (err) {
  42. // 如果渲染出错,调用next()传递错误
  43. return next(err);
  44. }
  45. // 渲染成功,存redis, 发送数据到客户端
  46. htmlData = html;
  47. try {
  48. await redis.set(cacheKey, htmlData, 'EX', CACHE_EXPIRES);
  49. } catch (e) {
  50. console.error(e);
  51. }
  52. res.send(htmlData);
  53. });
  54. } else {
  55. // 缓存命中, 直接发送缓存数据
  56. res.set({ 'X-From-Cache': 'true' });
  57. res.send(htmlData);
  58. }
  59. })().catch(next);
  60. });
  61. module.exports = router;