| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- var express = require('express');
- var router = express.Router();
- const models = require('../../models');
- const common = require('./common');
- const redis = require('../../libs/redis');
- const { coloringData } = require('./config');
- const { getListBuilder } = require('../../libs/pager');
- const CACHE_PREFIX = "art_v2";
- // const CACHE_EXPIRES = 60; // 60s刷新一次
- const CACHE_EXPIRES = 600;
- router.get('/', process());
- function process() {
- return (req, res, next) => {
- (async function () {
- let uri = req.originalUrl.substring(1);
- let cacheKey = `${CACHE_PREFIX}_${uri}`;
- let htmlData = await redis.getAsync(cacheKey);
- // htmlData = null;
- if (!htmlData) {
- if (!coloringData[uri].data) {
- let query = {
- orderBy: 'publishTime',
- order: 'desc',
- base: { status: 9000 },
- filters: { _id: coloringData[uri].list },
- }
- let result = await getListBuilder(query, models.Art, [{ path: 'user', select: 'username' }]);
- common.organizeData(result.data);
- coloringData[uri].data = result.data;
- }
- const comments = await models.Comment.find({ approved: true, page: coloringData[uri].title }).sort({ createdAt: -1 });
- let data = {
- uri: req.originalUrl,
- data: coloringData[uri],
- pageId: coloringData[uri].title,
- comments,
- dateFormat: common.dateFormat,
- };
- // 渲染EJS模板到内存中
- res.render('v2/coloring-page-collection', 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;
|