var express = require('express'); var router = express.Router(); const models = require('../models'); const config = require('../config/app'); const redis = require('../libs/redis'); const categories = require('../config/category'); const { tags, tagsHashMap, getTagSeoTitle, getTagSeoDescription, getTagH1Title } = require('../config/tag'); const languages = require('../config/language'); const translate = require('../config/translate'); const meta = require('../config/meta'); const utils = require('../libs/utils'); const DailyFactory = require('../models/daily-factory'); const datefns = require('date-fns'); const { format } = require('date-fns'); const { getListBuilder } = require('../libs/pager'); const CACHE_PREFIX = "tooltricks_v1"; // const CACHE_EXPIRES = 60; // 60s刷新一次 const CACHE_EXPIRES = 600; // tools-tricks router.get('/', function (req, res, next) { (async function () { let cacheKey = `${CACHE_PREFIX}_${req.originalUrl}`; let htmlData = await redis.getAsync(cacheKey); if (!htmlData) { let lang = utils.lang.ensureLanguage(req.params.lang); if (!req.cookies.lang || req.cookies.lang != lang) { res.cookie('lang', lang, config.cookie); } let title = 'titletitle'; let description = 'description-description'; let data = { title, description, languages, translate, lang, uri: req.originalUrl, }; // 渲染EJS模板到内存中 res.render('article', data, async (err, html) => { if (err) { // 如果渲染出错,调用next()传递错误 return next(err); } // 渲染成功,存redis, 发送数据到客户端 htmlData = html; try { await redis.set(cacheKey, htmlData, 'EX', CACHE_EXPIRES); } catch (e) { console.error(e); } res.send(htmlData); }); } else { // 缓存命中, 直接发送缓存数据 res.set({ 'X-From-Cache': 'true' }); res.send(htmlData); } })().catch(next); }); module.exports = router;