set-yoho-data.js 1.84 KB
/**
 * 设置 YOHO 数据
 * @author: 赵彪<bill.zhao@yoho.cn>
 * @date: 2016/6/16
 */

'use strict';

const _ = require('lodash');

module.exports = () => {
    return (req, res, next) => {
        const channelMap = {
            1: 'men',
            2: 'women'
        };

        const indexMap = {
            men: 0,
            women: 1
        };

        let yoho = {
            pageChannel: {},
            yohoTitle: 'BLK'
        };

        const channel = channelMap[req.query.app_channel] || req.query.channel || req.cookies._Channel || 'men';

        // 设置频道
        res.cookie('_Channel', channel, {path: '/'});
        res.cookie('_ChannelIndex', indexMap[channel], {path: '/'});

        // 用于头部颜色控制
        yoho.pageChannel[channel] = true;

        // 当前频道设置
        yoho.channel = channel;

        // 判断请求是否来自app
        let userAgent = req.get('User-Agent');

        yoho.isApp = /yh_blk/i.test(req.get('User-Agent')) || /YH_BLK/i.test(req.get('User-Agent'));
        yoho.isiOS = /\(i[^;]+;( U;)? CPU.+Mac OS X/i.test(userAgent);
        yoho.isAndroid = /Android/i.test(userAgent);
        yoho.isYohoBuy = /YohoBuy/i.test(userAgent);

        // 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);

            return remoteIp;
        }());

        Object.assign(res.locals, yoho);
        Object.assign(req.yoho, yoho);

        next();
    };
};