Authored by 姜枫

Merge branch 'release/node-gzip' into feature/11.11

... ... @@ -13,6 +13,7 @@ const yohoLib = require('yoho-node-lib');
const express = require('express');
const path = require('path');
const compression = require('compression');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const favicon = require('serve-favicon');
... ... @@ -65,6 +66,7 @@ app.use(bodyParser.urlencoded({
extended: false
}));
app.use(cookieParser());
app.use(compression());
app.use(session({
name: 'yohobuy_session_cookie',
... ... @@ -94,6 +96,7 @@ try {
const setPageInfo = require('./doraemon/middleware/set-pageinfo');
const devtools = require('./doraemon/middleware/devtools');
const seo = require('./doraemon/middleware/seo');
const pageCache = require('./doraemon/middleware/page-cache');
// YOHO 前置中间件
app.use(subDomain());
... ... @@ -107,16 +110,8 @@ try {
app.use(devtools());
}
// set no cache
app.use((req, res, next) => {
if (req.get('X-Requested-With') === 'XMLHttpRequest') {
res.set('Cache-Control', 'no-cache');
}
next();
});
app.use(pageCache());
require('./dispatch')(app);
app.all('*', errorHanlder.notFound()); // 404
// YOHO 后置中间件
... ...
... ... @@ -19,8 +19,11 @@ app.on('mount', function(parent) {
});
app.use(global.yoho.hbs({
extname: '.hbs',
<<<<<<< HEAD
defaultLayout: 'layout',
layoutsDir: doraemon,
=======
>>>>>>> release/node-gzip
partialsDir: path.join(__dirname, 'views/partial'),
views: path.join(__dirname, 'views/action'),
helpers: Object.assign({}, global.yoho.helpers, helpers)
... ...
... ... @@ -13,6 +13,7 @@ var app = express();
var doraemon = path.join(__dirname, '../../doraemon/views'); // parent view root
app.on('mount', function(parent) {
delete parent.locals.settings; // 不继承父 App 的设置
Object.assign(app.locals, parent.locals);
});
... ...
... ... @@ -44,7 +44,7 @@ function doPassportCallback(openId, nickname, sourceType, req, res) {
refer: refer
});
} else if (result.code === 200 && result.data.uid) {
return AuthHelper.syncUserSession(result.data.uid, req, res).then(() => {
return AuthHelper.syncUserSession(result.data.uid, req, res, result.data.session_key).then(() => {
return refer;
});
}
... ... @@ -161,7 +161,7 @@ const local = {
}
user.session = refer;
user.href = refer;
AuthHelper.syncUserSession(user.uid, req, res).then(() => {
AuthHelper.syncUserSession(user.uid, req, res, user.session_key).then(() => {
res.json({
code: 200,
data: user
... ...
... ... @@ -60,7 +60,12 @@ class Auth {
return api.get('', param);
}
static syncUserSession(uid, req, res) {
static syncUserSession(uid, req, res, sessionKey) {
if (sessionKey) {
global.yoho.cache.set(`java_session_key:${uid}`, sessionKey).catch(() => {
global.yoho.logger.error('write session key fail');
});
}
return Auth.profile(uid).then((userInfo) => {
let token = sign.makeToken(uid);
let data = userInfo.data;
... ...
'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/author/index': 1 * MINUTE,
'/guang/tags/index': 1 * MINUTE,
// 领券中心
'/activity/coupon/floor': 5 * MINUTE,
// 商品列表
'/product/list/index': 5 * MINUTE,
'/product/index/index': 5 * MINUTE,
// 秒杀列表
'/product/seckill': 30 * SECOND,
// 秒杀详情
// sale
'/product/sale': 5 * MINUTE,
'/product/outlet': 30 * SECOND,
'/product/index/brand': 2 * MINUTE
};
module.exports = cachePage;
... ...
'use strict';
const path = require('path');
const cachePage = require('../../config/cache');
const logger = global.yoho.logger;
module.exports = () => {
return (req, res, next) => {
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);
logger.debug(`route: ${key} cache = ${cachePage[key]}`);
// 如果存在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 if (req.get('X-Requested-With') === 'XMLHttpRequest') {
res.set('Cache-Control', 'no-cache');
} 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();
};
};
... ...
... ... @@ -21,6 +21,7 @@
"bluebird": "^3.4.6",
"body-parser": "^1.15.2",
"cheerio": "^0.22.0",
"compression": "^1.6.2",
"connect-multiparty": "^2.0.0",
"cookie-parser": "^1.4.3",
"cookie-session": "^1.2.0",
... ... @@ -38,7 +39,11 @@
"request-promise": "^3.0.0",
"serve-favicon": "^2.3.0",
"uuid": "^2.0.3",
<<<<<<< HEAD
"yoho-node-lib": "^0.1.24",
=======
"yoho-node-lib": "0.1.27",
>>>>>>> release/node-gzip
"yoho-zookeeper": "^1.0.3"
},
"devDependencies": {
... ...