Authored by 姜枫

add page cache

'use strict';
const SECOND = 1;
const MINUTE = 60 * SECOND;
const cachePage = {
'/': 5 * MINUTE,
// 频道页
'/boys': 30 * SECOND,
'/woman': 30 * SECOND,
'/kids': 30 * SECOND,
'/lifestyle': 30 * SECOND,
// 商品详情页
'/product/\\/pro_([\\d]+)_([\\d]+)\\/(.*)/': 30 * MINUTE,
// 逛
'/guang': 1 * MINUTE,
'/guang/info/index': 10 * MINUTE,
'/guang/index/editor': 1 * MINUTE,
'/guang/tags/index': 1 * MINUTE,
// 领券中心
'/activity/coupon/index': 5 * MINUTE,
// 商品列表
'/product/list/index': 5 * MINUTE,
'/product/index/index': 5 * MINUTE,
// 秒杀列表
'/product/seckill': 30 * SECOND,
// 秒杀详情
// sale
'/product/sale': 5 * MINUTE,
'/product/sale/vip': 5 * MINUTE,
'/product/sale/breakingYards': 5 * MINUTE,
'/product/sale/newSale': 5 * MINUTE,
'/product/sale/discount/detail': 5 * MINUTE,
'/product/outlet': 30 * SECOND,
'/product/index/brand': 2 * MINUTE,
'/product/index/about': 10 * MINUTE,
'/product/shoplist': 2 * MINUTE,
'/product/list/new': 30 * SECOND,
// 品牌一览
'/brands': 5 * MINUTE,
'/brands/plusstar': 5 * MINUTE,
'/special/(\\d+)_(.*)\\.html': 5 * MINUTE
};
module.exports = cachePage;
... ...
'use strict';
const path = require('path');
const cachePage = require('../../config/cache');
module.exports = () => {
return (req, res, next) => {
if (req.get('X-Requested-With') === 'XMLHttpRequest') {
res.set('Cache-Control', 'no-cache');
}
function onRender() {
let route = req.route ? req.route.path : '';
let appPath = req.app.mountpath;
let key = path.join(appPath, route.toString()); // route may be a regexp
req.app.set('etag', false);
// 如果存在cache配置,并且业务代码中没有设置
if (cachePage[key] && res.get('Cache-Control') !== 'no-cache') {
res.set({
'Cache-Control': 'max-age=' + cachePage[key]
});
res.removeHeader('Pragma');
res.removeHeader('Expires');
} else {
res.set({
'Cache-Control': 'no-cache',
Pragma: 'no-cache',
Expires: new Date(1900, 0, 1, 0, 0, 0, 0)
});
}
}
res.on('render', onRender);
next();
};
};
... ...
... ... @@ -62,7 +62,7 @@
"uuid": "^2.0.2",
"winston": "^2.2.0",
"winston-daily-rotate-file": "^1.1.4",
"yoho-node-lib": "0.1.23",
"yoho-node-lib": "0.1.25",
"yoho-zookeeper": "^1.0.3"
},
"devDependencies": {
... ...