set-yoho-data.js
2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/**
* 设置 YOHO 数据
* @author: 赵彪<bill.zhao@yoho.cn>
* @date: 2016/6/16
*/
'use strict';
const uuid = require('uuid');
const _ = require('lodash');
const config = global.yoho.config;
const helpers = global.yoho.helpers;
const net = require('net');
const _getGender = (channel) => {
switch (channel) {
case 'boys':
return '1,3';
case 'girls':
return '2,3';
default:
return '1,2,3';
}
};
const CHANNEL = {
boys: 'boys',
girls: 'girls',
kids: 'kids',
lifestyle: 'lifestyle'
};
const CHANNEL_NUM = {
boys: 1,
girls: 2,
kids: 3,
lifestyle: 4
};
module.exports = () => {
return (req, res, next) => {
let yoho = {
pageChannel: {}
};
const channel = CHANNEL[req.query.channel || req.cookies._Channel] || CHANNEL.boys;
if (req.query.channel) {
req.query.channel = channel;
}
// 用于头部颜色控制
yoho.pageChannel[channel] = true;
// 当前频道设置
yoho.channel = channel;
// 当前频道数
yoho.channelNum = CHANNEL_NUM[channel] || CHANNEL_NUM.boys;
// 当前性别
yoho.gender = _getGender(channel);
yoho.isApp = req.query.app_version || req.query.appVersion;
// client ip
yoho.clientIp = (function() {
let remoteIp = req.get('X-Yoho-Real-IP') || req.get('X-Forwarded-For') || req.get('X-Real-IP') || req.ip || ''; // eslint-disable-line
if (remoteIp.indexOf(',') > 0) {
let arr = remoteIp.split(',');
remoteIp = _.trim(arr[0]);
}
if (_.startsWith(remoteIp, '10.66.')) {
remoteIp = req.get('X-Real-IP');
}
remoteIp = _.trim(remoteIp);
if (!net.isIPv4(remoteIp)) {
let ipv6String = remoteIp.split(':');
remoteIp = ipv6String[ipv6String.length - 1];
}
return remoteIp;
}());
// uuid
yoho.udid = (function() {
let udid = req.cookies.udid;
if (!udid) {
udid = uuid.v4();
if (res && res.cookie) {
res.cookie('udid', udid, {
domain: config.cookieDomain,
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
});
}
}
req.cookies.udid = udid;
return udid;
}());
if (!req.xhr) {
yoho.mobileRefer = helpers.urlFormat(req.url, null, 'm');
}
Object.assign(res.locals, yoho);
Object.assign(req.yoho, yoho);
next();
};
};