Authored by Feng

merge handle

... ... @@ -11,5 +11,6 @@
},
"parserOptions": {
"sourceType": "module"
}
},
"extends": "yoho"
}
... ...
... ... @@ -12,22 +12,26 @@ if (config.useOneapm) {
require('oneapm');
}
let express = require('express'),
path = require('path'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
favicon = require('serve-favicon'),
pkg = require('./package.json');
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const favicon = require('serve-favicon');
const session = require('express-session');
const memcached = require('connect-memcached');
const pkg = require('./package.json');
require('express-handlebars');
const app = express();
const MemcachedStore = memcached(session);
let app = express();
// 向模板注入变量
app.locals.devEnv = app.get('env') === 'development';
app.locals.version = pkg.version;
// 指定libray目录
global.library = path.resolve('./library');
app.set('view engine', '.hbs');
app.use(favicon(path.join(__dirname, '/public/favicon.ico')));
... ... @@ -35,11 +39,22 @@ app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(session({
secret: '3e5fec7deca0b8305cefe2ad9d90ff5e',
name: 'PHPSESSID',
prefix: 'yohobuy',
proxy: true,
resave: true,
saveUninitialized: true,
store: new MemcachedStore({
hosts: config.memcache.session
})
}));
// dispatcher
require('./dispatch')(app);
// listener
app.listen(6001, function() {
app.listen(config.port, function() {
console.log('yohobuy start');
});
... ...
... ... @@ -10,11 +10,13 @@ const isProduction = process.env.NODE_ENV === 'production';
const isTest = process.env.NODE_ENV === 'test';
module.exports = {
port: 6001,
siteUrl: 'http://m.yohobuy.com',
domains: {
api: 'http://testapi.yoho.cn:28078/', // http://devapi.yoho.cn:58078/ http://testapi.yoho.cn:28078/
service: 'http://devapi.yoho.cn:58078/'
},
useOneapm: false,
useCache: true,
memcache: {
master: ['192.168.102.168:12580'],
... ... @@ -26,12 +28,12 @@ module.exports = {
infoFile: {
name: 'info',
level: 'info',
filename: 'info.log'
filename: 'log/info.log'
},
errorFile: {
name: 'error',
level: 'error',
filename: 'error.log',
filename: 'log/error.log',
handleExceptions: true
},
udp: { // send by udp
... ...
... ... @@ -6,7 +6,7 @@
'use strict';
const _ = require('lodash');
const qs = require('querystring');
const md5 = require('md5');
const privateKey = {
... ... @@ -24,7 +24,7 @@ const privateKey = {
* @return {Object} 排序之后的参数对象
*/
const packageSort = argument => {
var newObj = {};
let newObj = {};
for (let k of Object.keys(argument).sort()) {
newObj[k] = argument[k];
... ... @@ -39,18 +39,11 @@ const packageSort = argument => {
* @return {string} 生成的签名字符串
*/
const makeSign = argument => {
var qs = [];
_.forEach(argument, function(value, key) {
qs.push(key + '=' + _.trim(value));
});
return md5(qs.join('&')).toLowerCase();
return md5(qs.stringify(argument)).toLowerCase();
};
// 生成API签名,调用后端接口的时候有私钥校验
exports.apiSign = (params) => {
/* eslint-disable */
var sign = packageSort(Object.assign({
client_type: 'h5',
... ... @@ -60,18 +53,18 @@ exports.apiSign = (params) => {
screen_size: '720x1280',
v: '7'
}, params));
/* eslint-enable */
return Object.assign(sign, {
sign = Object.assign(sign, {
client_secret: makeSign(sign) // eslint-disable-line camelcase
});
delete sign.private_key;
return sign;
};
// 检查签名,APP 访问 H5 页面的时候需要检查
exports.checkSign = (params) => {
var clientSecret = params.client_secret, // eslint-disable-line camelcase
let clientSecret = params.client_secret, // eslint-disable-line camelcase
sortedParams;
// 忽略部分参数
... ... @@ -88,7 +81,7 @@ exports.checkSign = (params) => {
// 检查签名,APP 访问 H5 页面的时候需要检查, 有可能不同于上边的签名方式
exports.webSign = (params) => {
var webPrivateKey = 'yohobuyapp';
const webPrivateKey = 'yohobuyapp';
return params.key === md5(md5(webPrivateKey) + params.uid);
};
... ...
... ... @@ -13,9 +13,9 @@
"online": "NODE_ENV=\"production\" node app.js",
"debug": "DEBUG=\"express:*\" node app.js",
"lint-js": "./node_modules/.bin/eslint -c .eslintrc --cache --fix .",
"lint-css": "./node_modules/.bin/stylelint --config .stylelintrc public/**/*.css",
"lint-css": "./node_modules/.bin/stylelint --config .stylelintrc public/scss/**/*.css",
"precommit": "node lint.js",
"test": "ava"
"test": "./node_modules/.bin/nyc ./node_modules/.bin/ava"
},
"ava": {
"tap": true,
... ... @@ -24,8 +24,7 @@
],
"babel": {
"presets": [
"es2015",
"stage-2"
"es2015"
]
}
},
... ... @@ -33,9 +32,11 @@
"dependencies": {
"bluebird": "^3.3.5",
"body-parser": "^1.15.0",
"connect-memcached": "^0.2.0",
"cookie-parser": "^1.4.1",
"express": "^4.13.1",
"express-handlebars": "^3.0.0",
"express-session": "^1.13.0",
"influxdb-winston": "^1.0.1",
"lodash": "^4.12.0",
"md5": "^2.1.0",
... ... @@ -45,17 +46,15 @@
"request-promise": "^3.0.0",
"serve-favicon": "^2.3.0",
"winston": "^2.2.0",
"winston-daily-rotate-file": "^1.0.1",
"yoho-handlebars": "0.0.1"
"winston-daily-rotate-file": "^1.0.1"
},
"devDependencies": {
"autoprefixer": "^6.3.6",
"ava": "^0.14.0",
"babel-cli": "^6.8.0",
"babel-preset-es2015": "^6.6.0",
"babel-preset-stage-2": "^6.5.0",
"babel-register": "^6.8.0",
"eslint": "^2.9.0",
"eslint": "^2.10.2",
"eslint-config-yoho": "^1.0.1",
"gulp": "^3.9.1",
"gulp-cssnano": "^2.1.2",
... ... @@ -66,6 +65,7 @@
"husky": "^0.11.4",
"mocha": "^2.4.5",
"nodemon": "1.9.2",
"nyc": "^6.4.3",
"postcss-assets": "^4.0.1",
"postcss-cachebuster": "^0.1.2",
"postcss-calc": "^5.2.1",
... ... @@ -79,17 +79,17 @@
"postcss-sprites": "^3.1.2",
"postcss-use": "^2.0.2",
"precss": "^1.4.0",
"rewire": "^2.5.1",
"shelljs": "^0.7.0",
"stylelint": "^6.3.3",
"stylelint-config-yoho": "^1.2.2",
"stylelint-config-yoho": "^1.2.3",
"webpack": "^1.13.0",
"webpack-dev-server": "^1.14.1",
"webpack-stream": "^3.1.0",
"yoho-fastclick": "0.0.1",
"yoho-hammer": "0.0.1",
"yoho-jquery": "0.0.3",
"yoho-jquery-lazyload": "0.0.2",
"yoho-swiper": "0.0.1"
"yoho-fastclick": "^1.0.6",
"yoho-hammer": "^2.0.7",
"yoho-handlebars": "^4.0.5",
"yoho-jquery": "^1.9.1",
"yoho-jquery-lazyload": "^1.9.7",
"yoho-swiper": "^3.3.1"
}
}
... ...
// /**
// * http api 测试
// *
// * @author: jiangfeng<jeff.jiang@yoho.cn>
// * @date: 2016/05/17
// */
/**
* http api 测试
*
* @author: jiangfeng<jeff.jiang@yoho.cn>
* @date: 2016/05/17
*/
// import test from 'ava';
const test = require('ava');
const sign = require('../../library/sign');
const API = require('../../library/api').ServiceAPI;
// import {SearchAPI} from '../../library/api';
const api = new API();
// test('api get test', async (t) => {
// let api = new SearchAPI('');
// let data = await api.get();
// console.log(data);
// });
test('api get test', (t) => {
return api.get('operations/api/v6/category/getCategory', sign.apiSign({})).then(result => {
if (result && result.code === 200) {
t.pass();
} else {
t.fail();
}
});
});
... ...
const headerModel = require('../../doraemon/models/header');
const test = require('ava').test;
test('test setNavHeader method', t => {
const headerData = headerModel.setNavHeader('逛');
t.is(headerData.navTitle, '逛');
t.true(headerData.backUrl);
t.true(headerData.navBtn);
});
... ... @@ -6,7 +6,7 @@
'use strict';
const test = require('ava').test;
const test = require('ava');
const helpers = require('../../library/helpers');
test('qiniu image url handle', t => {
... ...
... ... @@ -2,7 +2,7 @@
* logger 工具类测试
*/
const test = require('ava').test;
const test = require('ava');
const shelljs = require('shelljs');
const logger = require('../../library/logger');
... ... @@ -23,7 +23,7 @@ const logger = require('../../library/logger');
// };
test.cb('logger test', t => {
shelljs.rm('-f', '*.log.*');
shelljs.rm('-f', 'log/*.log.*');
logger.info('xxx', () => {
shelljs.ls('info.log.*').forEach(s => console.log('generate log file:' + s));
t.end();
... ... @@ -31,6 +31,6 @@ test.cb('logger test', t => {
});
test.after('clean test log file ', t => {
shelljs.rm('-f', '*.log.*');
shelljs.rm('-f', 'log/*.log.*');
t.pass();
});
... ...
... ... @@ -5,12 +5,12 @@
* @date: 2016/05/17
*/
const test = require('ava').test;
const test = require('ava');
const sign = require('../../library/sign');
test('app sign test', t => {
let params = {
client_type: 'h5',
client_type: 'h5', // eslint-disable-line
a: 1,
b: 'b'
};
... ...
... ... @@ -5,7 +5,7 @@
* @date: 2016/05/17
*/
const test = require('ava').test;
const test = require('ava');
const Timer = require('../../library/timer');
const sleep = (timeout) => {
... ...