Authored by 毕凯

Merge branch 'develop' of git.yoho.cn:fe/yohobuy-node into develop

@@ -17,8 +17,8 @@ const path = require('path'); @@ -17,8 +17,8 @@ const path = require('path');
17 const bodyParser = require('body-parser'); 17 const bodyParser = require('body-parser');
18 const cookieParser = require('cookie-parser'); 18 const cookieParser = require('cookie-parser');
19 const favicon = require('serve-favicon'); 19 const favicon = require('serve-favicon');
20 -const session = require('yoho-express-session');  
21 -const memcached = require('yoho-connect-memcached'); 20 +const session = require('express-session');
  21 +const memcached = require('connect-memcached');
22 const hbs = require('express-handlebars'); 22 const hbs = require('express-handlebars');
23 const pkg = require('./package.json'); 23 const pkg = require('./package.json');
24 24
@@ -10,7 +10,7 @@ const _ = require('lodash'); @@ -10,7 +10,7 @@ const _ = require('lodash');
10 10
11 const channelModel = require('../models/index'); 11 const channelModel = require('../models/index');
12 12
13 -exports.index = (req, res) => { 13 +exports.index = (req, res, next) => {
14 let channelType = req.path.substring(1) || 'boys'; 14 let channelType = req.path.substring(1) || 'boys';
15 15
16 // 将woman转换为girls,以便model层进行处理 16 // 将woman转换为girls,以便model层进行处理
@@ -18,18 +18,18 @@ exports.index = (req, res) => { @@ -18,18 +18,18 @@ exports.index = (req, res) => {
18 18
19 channelModel.getContent(channelType).then(data => { 19 channelModel.getContent(channelType).then(data => {
20 res.render('channel', data); 20 res.render('channel', data);
21 - }); 21 + }).catch(next);
22 }; 22 };
23 23
24 -exports.getbrandFloorDataAjax = (req, res) => { 24 +exports.getbrandFloorDataAjax = (req, res, next) => {
25 const channelType = req.query.channelType || 'boys'; 25 const channelType = req.query.channelType || 'boys';
26 26
27 channelModel.getbrandFloorDataAjax(channelType).then(data => { 27 channelModel.getbrandFloorDataAjax(channelType).then(data => {
28 res.json(data); 28 res.json(data);
29 - }); 29 + }).catch(next);
30 }; 30 };
31 31
32 -exports.getNewArrival = (req, res) => { 32 +exports.getNewArrival = (req, res, next) => {
33 let reqBody = req.body, 33 let reqBody = req.body,
34 pageIndex = reqBody.pageIndex, 34 pageIndex = reqBody.pageIndex,
35 pageCount = reqBody.pageCount, 35 pageCount = reqBody.pageCount,
@@ -54,5 +54,5 @@ exports.getNewArrival = (req, res) => { @@ -54,5 +54,5 @@ exports.getNewArrival = (req, res) => {
54 }; 54 };
55 } 55 }
56 res.send(result); 56 res.send(result);
57 - }); 57 + }).catch(next);
58 }; 58 };
1 /** 1 /**
2 - * girls model 2 + * 频道页 model
3 * @author: 赵彪<bill.zhao@yoho.cn> 3 * @author: 赵彪<bill.zhao@yoho.cn>
4 * @date: 2016/05/17 4 * @date: 2016/05/17
5 */ 5 */
@@ -7,11 +7,15 @@ @@ -7,11 +7,15 @@
7 7
8 const _ = require('lodash'); 8 const _ = require('lodash');
9 9
  10 +const dataMap = require('../../../config/data-map');
  11 +
10 const ServiceAPI = require(`${global.library}/api`).ServiceAPI; 12 const ServiceAPI = require(`${global.library}/api`).ServiceAPI;
11 const SearchAPI = require(`${global.library}/api`).SearchAPI; 13 const SearchAPI = require(`${global.library}/api`).SearchAPI;
12 const sign = require(`${global.library}/sign`); 14 const sign = require(`${global.library}/sign`);
13 const helpers = require(`${global.library}/helpers`); 15 const helpers = require(`${global.library}/helpers`);
14 const images = require(`${global.utils}/images`); 16 const images = require(`${global.utils}/images`);
  17 +
  18 +// const processProduct = require(`${global.utils}/product-process`).processProductList;
15 const log = require(`${global.library}/logger`); 19 const log = require(`${global.library}/logger`);
16 20
17 21
@@ -25,9 +29,7 @@ const getShelveTime = duration => { @@ -25,9 +29,7 @@ const getShelveTime = duration => {
25 todayMil = today.getTime().toString().substr(0, 10), 29 todayMil = today.getTime().toString().substr(0, 10),
26 startDayMil = (today.setMonth(today.getMonth() - duration)).toString().substr(0, 10); 30 startDayMil = (today.setMonth(today.getMonth() - duration)).toString().substr(0, 10);
27 31
28 - return `${startDayMil},${todayMil}`;  
29 -  
30 - // ` 32 + return `${startDayMil},${todayMil}`; // `返回时间
31 }; 33 };
32 34
33 // 获取可用的标题 35 // 获取可用的标题
@@ -46,112 +48,15 @@ const getText = data => { @@ -46,112 +48,15 @@ const getText = data => {
46 return text; 48 return text;
47 }; 49 };
48 50
49 -const channelMap = {  
50 - boys: {  
51 - code: '79372627eee75d73afe7f9bac91e5ce6',  
52 - gender: '1,3'  
53 - },  
54 - girls: {  
55 - code: '75215008957605c05e8cd375eac4f817',  
56 - gender: '2,3'  
57 - },  
58 - kids: {  
59 - code: 'd71f4b27f2a7229fbb31a4bc490a6f36',  
60 - gender: '2,3'  
61 - },  
62 - lifestyle: {  
63 - code: '8a341ca7eacc069ba80f02dec80eaf34',  
64 -  
65 - // code: '380c38155fd8beee10913a3f5b462da6',  
66 - // code: '665f7c2fb9d037ee820766953ee34bf7',  
67 - gender: '2,3'  
68 - }  
69 -}; 51 +const channelMap = dataMap.channel;
70 52
71 -const sortMap = {  
72 - boys: [  
73 - {sort: 147, viewNum: 5}, // 休闲运动鞋  
74 - {sort: 129, viewNum: 5}, // 休闲裤  
75 - {sort: 152, viewNum: 5}, // 双肩包  
76 - {misort: 11, viewNum: 5}, // T恤  
77 - {sort: 115, viewNum: 5}, // 衬衫  
78 - {sort: 130, viewNum: 5}, // 牛仔裤  
79 - {misort: 60, viewNum: 5}, // 帽子  
80 - {sort: 124, viewNum: 5}, // 夹克  
81 - {sort: 119, viewNum: 5}, // 卫衣  
82 - {sort: 162, viewNum: 5}, // 手表  
83 - {sort: 148, viewNum: 5}, // 靴子  
84 - {misort: 65, viewNum: 5}, // 首饰  
85 - {sort: 151, viewNum: 5}, // 时装鞋  
86 - {misort: 61, viewNum: 5}, // 太阳镜  
87 - {misort: 39, viewNum: 5}, // 袜子  
88 - {sort: 346, viewNum: 5}, // 运动裤  
89 - {sort: 131, viewNum: 5}, // 短裤  
90 - {misort: 66, viewNum: 5}, // 配饰  
91 - {misort: 309, viewNum: 5}, // 内裤  
92 - {misort: 30, viewNum: 5}, // 打底裤/紧身裤  
93 - {sort: 342, viewNum: 5} // 邮差包  
94 - ],  
95 - girls: [  
96 - {misort: 16, viewNum: 4}, // 卫衣  
97 - {misort: 12, viewNum: 4}, // 衬衫  
98 - {misort: 44, viewNum: 4}, // 休闲/运动鞋  
99 - {misort: 11, viewNum: 4}, // T恤  
100 - {misort: 21, viewNum: 4}, // 夹克  
101 - {misort: 257, viewNum: 4}, // 毛衣/针织  
102 - {misort: 22, viewNum: 4}, // 大衣/风衣  
103 - {misort: 26, viewNum: 4}, // 休闲裤  
104 - {misort: 27, viewNum: 4}, // 牛仔裤  
105 - {misort: 31, viewNum: 4}, // 连衣裙  
106 - {misort: 32, viewNum: 4}, // 半身裙  
107 - {misort: 48, viewNum: 4}, // 时装鞋  
108 - {misort: 49, viewNum: 4}, // 双肩包  
109 - {misort: 50, viewNum: 4}, // 手拎包/单肩包  
110 - {misort: 60, viewNum: 4}, // 帽子  
111 - {misort: 65, viewNum: 4}, // 首饰  
112 - {misort: 59, viewNum: 4}, // 手表  
113 - {misort: 61, viewNum: 4}, // 太阳镜  
114 - {misort: 66, viewNum: 4} // 配饰  
115 - ],  
116 - kids: [  
117 - {misort: 366, viewNum: 4}, // T恤  
118 - {misort: 367, viewNum: 4}, // 衬衫  
119 - {misort: 396, viewNum: 4}, // 卫衣  
120 - {misort: 400, viewNum: 4}, // // 毛衣/针织  
121 - {misort: 404, viewNum: 4}, // 夹克  
122 - {misort: 369, viewNum: 4}, // 休闲裤  
123 - {misort: 388, viewNum: 4}, // 牛仔裤  
124 - {misort: 371, viewNum: 4}, // 连衣裙  
125 - {misort: 370, viewNum: 4}, // 半身裙  
126 - {misort: 368, viewNum: 4}, // 休闲/运动鞋  
127 - {misort: 392, viewNum: 4}, // 双肩包  
128 - {misort: 414, viewNum: 4}, // 帽子  
129 - {misort: 372, viewNum: 4}, // 短裤  
130 - {misort: 384, viewNum: 4}, // 打底裤/紧身裤  
131 - {misort: 382, viewNum: 4}, // 凉鞋/拖鞋  
132 - {misort: 402, viewNum: 4}, // 马甲  
133 - {misort: 386, viewNum: 4}, // 背心  
134 - {misort: 406, viewNum: 4}, // 大衣/风衣  
135 - {misort: 430, viewNum: 4}, // 羽绒服  
136 - {misort: 423, viewNum: 4}, // 棉衣  
137 - {misort: 417, viewNum: 4} // 套装  
138 - ],  
139 - lifestyle: [  
140 - {sort: 171, viewNum: 5}, // 耳机  
141 - {sort: 398, viewNum: 5}, // 只能装备  
142 - {sort: 185, viewNum: 5}, // 相机  
143 - {misort: 259, viewNum: 5}, // 美妆  
144 - {sort: 267, viewNum: 5}, // 杯子/水壶  
145 - {sort: 313, viewNum: 5}, // 手机/ipad壳套  
146 - {sort: 211, viewNum: 5}, // 数码配件  
147 - {sort: 292, viewNum: 5}, // 玩偶  
148 - {sort: 272, viewNum: 5}, // 储物收纳  
149 - {sort: 183, viewNum: 5}, // 启用家居  
150 - {sort: 273, viewNum: 5}, // 厨具/餐具  
151 - {sort: 271, viewNum: 5} // 靠枕/靠垫/抱枕  
152 - ]  
153 -}; 53 +const sortMap = dataMap.sort;
154 54
  55 +/**
  56 + * 获取导航信息
  57 + * @param {[Object]} 原始数据
  58 + * @return {[Object]} 转换后的数据
  59 + */
155 const getNavs = rawNavs => { 60 const getNavs = rawNavs => {
156 const navs = rawNavs; 61 const navs = rawNavs;
157 let list = []; 62 let list = [];
@@ -279,23 +184,29 @@ const formatProduct = (productData, showTags, showNew, showSale, width, height, @@ -279,23 +184,29 @@ const formatProduct = (productData, showTags, showNew, showSale, width, height,
279 return result; 184 return result;
280 }; 185 };
281 186
282 -const getBannerList = data => {  
283 - let list = [];  
284 187
285 - _.forEach(data, (bannerData) => {  
286 - let obj = {};  
287 -  
288 - obj.href = bannerData.url;  
289 - obj.img = bannerData.src;  
290 - obj.name = bannerData.title; 188 +/**
  189 + * 获取普通banner
  190 + * @param {[Object]} data 原始数据
  191 + * @return {[Object]} 转换后的数据
  192 + */
  193 +const getBannerList = data => {
291 194
292 - list.push(obj); 195 + return _.map(data, item => {
  196 + return Object.assign(item, {
  197 + href: item.url,
  198 + img: item.src,
  199 + name: item.title
  200 + });
293 }); 201 });
294 -  
295 - return list;  
296 }; 202 };
297 203
298 204
  205 +/**
  206 + * 获取带小图的banner
  207 + * @param {[Object]} data 原始数据
  208 + * @return {[Object]} 转换后的数据
  209 + */
299 const getDebrisSlide = data => { 210 const getDebrisSlide = data => {
300 let floorData = { 211 let floorData = {
301 debrisSlider: { 212 debrisSlider: {
@@ -319,6 +230,12 @@ const getDebrisSlide = data => { @@ -319,6 +230,12 @@ const getDebrisSlide = data => {
319 return floorData; 230 return floorData;
320 }; 231 };
321 232
  233 +
  234 +/**
  235 + * 获取广告位
  236 + * @param {Object} data 原始数据
  237 + * @return {Object} 转换后的数据
  238 + */
322 const getadbannerData = data => { 239 const getadbannerData = data => {
323 const obj = { 240 const obj = {
324 adbanner: { 241 adbanner: {
@@ -335,6 +252,11 @@ const getadbannerData = data => { @@ -335,6 +252,11 @@ const getadbannerData = data => {
335 return obj; 252 return obj;
336 }; 253 };
337 254
  255 +/**
  256 + * 生成banner模板数据
  257 + * @param {Object} srcData 原始数据
  258 + * @return {Object} 转换后的数据
  259 + */
338 const getSlideData = srcData => { 260 const getSlideData = srcData => {
339 const slideData = { 261 const slideData = {
340 slide: { 262 slide: {
@@ -359,6 +281,11 @@ const getSlideData = srcData => { @@ -359,6 +281,11 @@ const getSlideData = srcData => {
359 }; 281 };
360 282
361 283
  284 +/**
  285 + * 获取最新速报模板数据
  286 + * @param {Object} srcData 原始数据
  287 + * @return {Object} 转换后的数据
  288 + */
362 const getNewReportFloorData = args => { 289 const getNewReportFloorData = args => {
363 const title = args[0].data.text; 290 const title = args[0].data.text;
364 let item = args[1].data; 291 let item = args[1].data;
@@ -412,11 +339,23 @@ const getNewReportFloorData = args => { @@ -412,11 +339,23 @@ const getNewReportFloorData = args => {
412 return floorDatas; 339 return floorDatas;
413 }; 340 };
414 341
  342 +
  343 +/**
  344 + * 给目标对象绑定频道属性
  345 + * @param {Object} obj 需要绑定频道属性的对象
  346 + * @param {String} type 需要设置的频道类型
  347 + * @return undefined
  348 + */
415 const setChannelType = (obj, type) => { 349 const setChannelType = (obj, type) => {
416 obj[type + 'Channel'] = true; 350 obj[type + 'Channel'] = true;
417 }; 351 };
418 352
419 -// 优选品牌 353 +/**
  354 + * 获取优选品牌模板数据
  355 + * @param {[Object]} args 参数列表
  356 + * @param {String} type 频道类型
  357 + * @return {Object}
  358 + */
420 const getPreBrandTopData = (args, type) => { 359 const getPreBrandTopData = (args, type) => {
421 const title = args[0].data.text; 360 const title = args[0].data.text;
422 let item = args[1].data; 361 let item = args[1].data;
@@ -443,7 +382,12 @@ const getPreBrandTopData = (args, type) => { @@ -443,7 +382,12 @@ const getPreBrandTopData = (args, type) => {
443 return data; 382 return data;
444 }; 383 };
445 384
446 -// 热门品类 385 +/**
  386 + * 获取热门分类模板数据
  387 + * @param {[Object]} args 参数列表
  388 + * @param {String} type 频道类型
  389 + * @return {Object}
  390 + */
447 const getHotGoodsFloorData = (args, type) => { 391 const getHotGoodsFloorData = (args, type) => {
448 let item = args[0]; 392 let item = args[0];
449 let nextItem = args[1]; 393 let nextItem = args[1];
@@ -523,6 +467,12 @@ const getHotGoodsFloorData = (args, type) => { @@ -523,6 +467,12 @@ const getHotGoodsFloorData = (args, type) => {
523 }; 467 };
524 468
525 469
  470 +/**
  471 + * 获取boys人气单品模版数据
  472 + * @param {[Object]} args 参数列表
  473 + * @param {String} type 频道类型
  474 + * @return {Object}
  475 + */
526 const getBoysSingleHot = (args, type) => { 476 const getBoysSingleHot = (args, type) => {
527 const len = 10; 477 const len = 10;
528 const data = { 478 const data = {
@@ -568,6 +518,12 @@ const getBoysSingleHot = (args, type) => { @@ -568,6 +518,12 @@ const getBoysSingleHot = (args, type) => {
568 return floorDatas; 518 return floorDatas;
569 }; 519 };
570 520
  521 +/**
  522 + * 获取girls人气单品模版数据
  523 + * @param {[Object]} args 参数列表
  524 + * @param {String} type 频道类型
  525 + * @return {Object}
  526 + */
571 const getGirlsSingleHot = args => { 527 const getGirlsSingleHot = args => {
572 let goods = args[2].data; 528 let goods = args[2].data;
573 let skns = ''; 529 let skns = '';
@@ -591,7 +547,12 @@ const getGirlsSingleHot = args => { @@ -591,7 +547,12 @@ const getGirlsSingleHot = args => {
591 }; 547 };
592 548
593 549
594 -// 人气单品 550 +/**
  551 + * 人气单品入口
  552 + * @param {[Object]} args 参数列表
  553 + * @param {String} type 频道类型
  554 + * @return {Object}
  555 + */
595 const getSingleHotFloorData = (args, type) => { 556 const getSingleHotFloorData = (args, type) => {
596 if (type === 'boys') { 557 if (type === 'boys') {
597 return getBoysSingleHot(args, type); 558 return getBoysSingleHot(args, type);
@@ -600,6 +561,13 @@ const getSingleHotFloorData = (args, type) => { @@ -600,6 +561,13 @@ const getSingleHotFloorData = (args, type) => {
600 } 561 }
601 }; 562 };
602 563
  564 +/**
  565 + * 处理异步获取的人气单品数据
  566 + * @param {[Object]} args 参数列表
  567 + * @param {Object} queryResult 异步获取的数据
  568 + * @param {String} type 频道类型
  569 + * @return {Object}
  570 + */
603 const getAsyncSingleHot = (args, queryResult, type) => { 571 const getAsyncSingleHot = (args, queryResult, type) => {
604 const data = { 572 const data = {
605 singlehot: { 573 singlehot: {
@@ -622,32 +590,42 @@ const getAsyncSingleHot = (args, queryResult, type) => { @@ -622,32 +590,42 @@ const getAsyncSingleHot = (args, queryResult, type) => {
622 }); 590 });
623 } 591 }
624 592
625 - _.forEach(queryResult.data.product_list, (it, index) => {  
626 - let obj = {};  
627 - const formatData = formatProduct(it, true, true, true, 280, 373);  
628 -  
629 - if (index > 12) {  
630 - return;  
631 - } 593 + if (queryResult.data) {
  594 + _.forEach(queryResult.data.product_list || [], (it, index) => {
  595 + let obj = {};
  596 + const formatData = formatProduct(it, true, true, true, 280, 373);
632 597
  598 + if (index > 12) {
  599 + return;
  600 + }
633 601
634 - obj.price = formatData.salePrice;  
635 - obj.href = formatData.url;  
636 - obj.img = formatData.thumb;  
637 - obj.name = formatData.name;  
638 602
639 - if (index < 3) {  
640 - obj.tip = 'TOP' + (index + 1);  
641 - } 603 + obj.price = formatData.salePrice;
  604 + obj.href = formatData.url;
  605 + obj.img = formatData.thumb;
  606 + obj.name = formatData.name;
642 607
643 - data.singlehot.imgHot.push(obj);  
644 - }); 608 + if (index < 3) {
  609 + obj.tip = 'TOP' + (index + 1);
  610 + }
645 611
  612 + data.singlehot.imgHot.push(obj);
  613 + });
  614 + }
646 data.singlehot.navs = getNavs(args[1].data); 615 data.singlehot.navs = getNavs(args[1].data);
647 setChannelType(data.singlehot, type); 616 setChannelType(data.singlehot, type);
648 return data; 617 return data;
649 }; 618 };
650 619
  620 +/**
  621 + * 异步获取人气单品
  622 + * @param {[Object]} rawData 接口返回的原始数据
  623 + * @param {[Object]} floorData 已经经过处理的楼层数据
  624 + * @param {Object} queryResult 接口中用于请求人气单品的数据
  625 + * @param {String} title 人气单品楼层的标题
  626 + * @param {Type} type 人气单品楼层的类型
  627 + * @return {Object}
  628 + */
651 const processFloorDataWithQueryReusult = (rawData, floorData, queryResult, title, type) => { 629 const processFloorDataWithQueryReusult = (rawData, floorData, queryResult, title, type) => {
652 let data = {}; 630 let data = {};
653 631
@@ -716,7 +694,7 @@ exports.getNewArrival = channel => { @@ -716,7 +694,7 @@ exports.getNewArrival = channel => {
716 result = []; 694 result = [];
717 695
718 _.forEach(sortList, (it, index) => { 696 _.forEach(sortList, (it, index) => {
719 - if (res[index].data.product_list.length === sortList[index].viewNum) { 697 + if (res[index].data.product_list && res[index].data.product_list.length === sortList[index].viewNum) {
720 data = data.concat(res[index].data.product_list); 698 data = data.concat(res[index].data.product_list);
721 } 699 }
722 }); 700 });
@@ -825,8 +803,9 @@ const processFloorData = (rawData, type) => { @@ -825,8 +803,9 @@ const processFloorData = (rawData, type) => {
825 let floorList = []; 803 let floorList = [];
826 let searchPromise = []; 804 let searchPromise = [];
827 let singlehotFloorIndex = []; 805 let singlehotFloorIndex = [];
828 - let singlehotFloorTitile = []; 806 + let singlehotFloorTitle = [];
829 807
  808 + // 定义各种楼层需要用到的接口返回的数组中元素的个数
830 const bigFloorLength = 5; 809 const bigFloorLength = 5;
831 const normalFloorLength = 3; 810 const normalFloorLength = 3;
832 const hotCategoryLength = 2; 811 const hotCategoryLength = 2;
@@ -876,7 +855,7 @@ const processFloorData = (rawData, type) => { @@ -876,7 +855,7 @@ const processFloorData = (rawData, type) => {
876 singlehotFloorIndex.push(floorList.length); 855 singlehotFloorIndex.push(floorList.length);
877 856
878 // 记住楼层标题, 以便后面promise获取数据后插入楼层数据 857 // 记住楼层标题, 以便后面promise获取数据后插入楼层数据
879 - singlehotFloorTitile.push(getText(data.data.text)); 858 + singlehotFloorTitle.push(getText(data.data.text));
880 } else if (!_.isNil(floorData)) { 859 } else if (!_.isNil(floorData)) {
881 _.isArray(floorData) ? 860 _.isArray(floorData) ?
882 floorList = floorList.concat(floorData) : 861 floorList = floorList.concat(floorData) :
@@ -887,7 +866,7 @@ const processFloorData = (rawData, type) => { @@ -887,7 +866,7 @@ const processFloorData = (rawData, type) => {
887 return { 866 return {
888 floors: floorList, 867 floors: floorList,
889 promise: _.reverse(searchPromise), 868 promise: _.reverse(searchPromise),
890 - singlehotFloorTitile: _.reverse(singlehotFloorTitile), 869 + singlehotFloorTitle: _.reverse(singlehotFloorTitle),
891 singlehotFloorIndex: _.reverse(singlehotFloorIndex) 870 singlehotFloorIndex: _.reverse(singlehotFloorIndex)
892 }; 871 };
893 }; 872 };
@@ -895,8 +874,8 @@ const processFloorData = (rawData, type) => { @@ -895,8 +874,8 @@ const processFloorData = (rawData, type) => {
895 874
896 /** 875 /**
897 * 获取频道页数据 876 * 获取频道页数据
898 - * @param {string} type 传入频道页类型,值可以是: boys, girls, kids, lifestyle  
899 - * @return {object} 877 + * @param {String} type 传入频道页类型,值可以是: boys, girls, kids, lifestyle
  878 + * @return {Object}
900 */ 879 */
901 exports.getContent = type => { 880 exports.getContent = type => {
902 return Promise.all([headerModel.requestHeaderData(type), requestContent(type)]).then(res => { 881 return Promise.all([headerModel.requestHeaderData(type), requestContent(type)]).then(res => {
@@ -921,7 +900,7 @@ exports.getContent = type => { @@ -921,7 +900,7 @@ exports.getContent = type => {
921 floorData: data, 900 floorData: data,
922 searchPromise: processResult.promise, 901 searchPromise: processResult.promise,
923 singlehotFloorIndex: processResult.singlehotFloorIndex, 902 singlehotFloorIndex: processResult.singlehotFloorIndex,
924 - singlehotFloorTitile: processResult.singlehotFloorTitile, 903 + singlehotFloorTitle: processResult.singlehotFloorTitle,
925 channelType: type 904 channelType: type
926 }; 905 };
927 906
@@ -934,7 +913,7 @@ exports.getContent = type => { @@ -934,7 +913,7 @@ exports.getContent = type => {
934 result.floorData.channel 913 result.floorData.channel
935 .splice(result.singlehotFloorIndex[index], 0, 914 .splice(result.singlehotFloorIndex[index], 0,
936 processFloorDataWithQueryReusult(result.rawData, 915 processFloorDataWithQueryReusult(result.rawData,
937 - result.floorData, data, result.singlehotFloorTitile[index], result.channelType)); 916 + result.floorData, data, result.singlehotFloorTitle[index], result.channelType));
938 }); 917 });
939 918
940 return result.floorData; 919 return result.floorData;
  1 +/**
  2 + * 共用的map数据常量定义
  3 + * @author: 赵彪<bill.zhao@yoho.cn>
  4 + * @date: 2016/06/23
  5 + */
  6 +
  7 +'use strict';
  8 +
  9 +const channelMap = {
  10 + boys: {
  11 + code: '79372627eee75d73afe7f9bac91e5ce6',
  12 + gender: '1,3'
  13 + },
  14 + girls: {
  15 + code: '75215008957605c05e8cd375eac4f817',
  16 + gender: '2,3'
  17 + },
  18 + kids: {
  19 + code: 'd71f4b27f2a7229fbb31a4bc490a6f36',
  20 + gender: '2,3'
  21 + },
  22 + lifestyle: {
  23 + code: '8a341ca7eacc069ba80f02dec80eaf34',
  24 +
  25 + // code: '380c38155fd8beee10913a3f5b462da6',
  26 + // code: '665f7c2fb9d037ee820766953ee34bf7',
  27 + gender: '2,3'
  28 + }
  29 +};
  30 +
  31 +const sortMap = {
  32 + boys: [
  33 + {sort: 147, viewNum: 5}, // 休闲运动鞋
  34 + {sort: 129, viewNum: 5}, // 休闲裤
  35 + {sort: 152, viewNum: 5}, // 双肩包
  36 + {misort: 11, viewNum: 5}, // T恤
  37 + {sort: 115, viewNum: 5}, // 衬衫
  38 + {sort: 130, viewNum: 5}, // 牛仔裤
  39 + {misort: 60, viewNum: 5}, // 帽子
  40 + {sort: 124, viewNum: 5}, // 夹克
  41 + {sort: 119, viewNum: 5}, // 卫衣
  42 + {sort: 162, viewNum: 5}, // 手表
  43 + {sort: 148, viewNum: 5}, // 靴子
  44 + {misort: 65, viewNum: 5}, // 首饰
  45 + {sort: 151, viewNum: 5}, // 时装鞋
  46 + {misort: 61, viewNum: 5}, // 太阳镜
  47 + {misort: 39, viewNum: 5}, // 袜子
  48 + {sort: 346, viewNum: 5}, // 运动裤
  49 + {sort: 131, viewNum: 5}, // 短裤
  50 + {misort: 66, viewNum: 5}, // 配饰
  51 + {misort: 309, viewNum: 5}, // 内裤
  52 + {misort: 30, viewNum: 5}, // 打底裤/紧身裤
  53 + {sort: 342, viewNum: 5} // 邮差包
  54 + ],
  55 + girls: [
  56 + {misort: 16, viewNum: 4}, // 卫衣
  57 + {misort: 12, viewNum: 4}, // 衬衫
  58 + {misort: 44, viewNum: 4}, // 休闲/运动鞋
  59 + {misort: 11, viewNum: 4}, // T恤
  60 + {misort: 21, viewNum: 4}, // 夹克
  61 + {misort: 257, viewNum: 4}, // 毛衣/针织
  62 + {misort: 22, viewNum: 4}, // 大衣/风衣
  63 + {misort: 26, viewNum: 4}, // 休闲裤
  64 + {misort: 27, viewNum: 4}, // 牛仔裤
  65 + {misort: 31, viewNum: 4}, // 连衣裙
  66 + {misort: 32, viewNum: 4}, // 半身裙
  67 + {misort: 48, viewNum: 4}, // 时装鞋
  68 + {misort: 49, viewNum: 4}, // 双肩包
  69 + {misort: 50, viewNum: 4}, // 手拎包/单肩包
  70 + {misort: 60, viewNum: 4}, // 帽子
  71 + {misort: 65, viewNum: 4}, // 首饰
  72 + {misort: 59, viewNum: 4}, // 手表
  73 + {misort: 61, viewNum: 4}, // 太阳镜
  74 + {misort: 66, viewNum: 4} // 配饰
  75 + ],
  76 + kids: [
  77 + {misort: 366, viewNum: 4}, // T恤
  78 + {misort: 367, viewNum: 4}, // 衬衫
  79 + {misort: 396, viewNum: 4}, // 卫衣
  80 + {misort: 400, viewNum: 4}, // // 毛衣/针织
  81 + {misort: 404, viewNum: 4}, // 夹克
  82 + {misort: 369, viewNum: 4}, // 休闲裤
  83 + {misort: 388, viewNum: 4}, // 牛仔裤
  84 + {misort: 371, viewNum: 4}, // 连衣裙
  85 + {misort: 370, viewNum: 4}, // 半身裙
  86 + {misort: 368, viewNum: 4}, // 休闲/运动鞋
  87 + {misort: 392, viewNum: 4}, // 双肩包
  88 + {misort: 414, viewNum: 4}, // 帽子
  89 + {misort: 372, viewNum: 4}, // 短裤
  90 + {misort: 384, viewNum: 4}, // 打底裤/紧身裤
  91 + {misort: 382, viewNum: 4}, // 凉鞋/拖鞋
  92 + {misort: 402, viewNum: 4}, // 马甲
  93 + {misort: 386, viewNum: 4}, // 背心
  94 + {misort: 406, viewNum: 4}, // 大衣/风衣
  95 + {misort: 430, viewNum: 4}, // 羽绒服
  96 + {misort: 423, viewNum: 4}, // 棉衣
  97 + {misort: 417, viewNum: 4} // 套装
  98 + ],
  99 + lifestyle: [
  100 + {sort: 171, viewNum: 5}, // 耳机
  101 + {sort: 398, viewNum: 5}, // 只能装备
  102 + {sort: 185, viewNum: 5}, // 相机
  103 + {misort: 259, viewNum: 5}, // 美妆
  104 + {sort: 267, viewNum: 5}, // 杯子/水壶
  105 + {sort: 313, viewNum: 5}, // 手机/ipad壳套
  106 + {sort: 211, viewNum: 5}, // 数码配件
  107 + {sort: 292, viewNum: 5}, // 玩偶
  108 + {sort: 272, viewNum: 5}, // 储物收纳
  109 + {sort: 183, viewNum: 5}, // 启用家居
  110 + {sort: 273, viewNum: 5}, // 厨具/餐具
  111 + {sort: 271, viewNum: 5} // 靠枕/靠垫/抱枕
  112 + ]
  113 +};
  114 +
  115 +
  116 +module.exports = {
  117 + channel: channelMap,
  118 + sort: sortMap
  119 +};
@@ -33,9 +33,11 @@ @@ -33,9 +33,11 @@
33 "dependencies": { 33 "dependencies": {
34 "bluebird": "^3.4.0", 34 "bluebird": "^3.4.0",
35 "body-parser": "^1.15.0", 35 "body-parser": "^1.15.0",
  36 + "connect-memcached": "^0.2.0",
36 "cookie-parser": "^1.4.3", 37 "cookie-parser": "^1.4.3",
37 "express": "^4.13.1", 38 "express": "^4.13.1",
38 "express-handlebars": "^3.0.0", 39 "express-handlebars": "^3.0.0",
  40 + "express-session": "^1.13.0",
39 "influxdb-winston": "^1.0.1", 41 "influxdb-winston": "^1.0.1",
40 "lodash": "^4.13.1", 42 "lodash": "^4.13.1",
41 "md5": "^2.1.0", 43 "md5": "^2.1.0",