dispatch.js 2.58 KB
/**
 * 路由分发
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/4/27
 */

const _ = require('lodash');
const express = require('express');
const methods = require('methods');

const routerHold = (app) => {
    app.use = ((appUse) => {
        return (...args) => {
            let rootPath = '';
            const arg = args[0];

            if (typeof arg !== 'function') {
                rootPath = arg;
            }

            app.locals.rootPath = rootPath || '';

            return appUse.call(app, ...args);
        };
    })(app.use);

    express.Router = ((_router) => {
        const baseRouter = _router();

        return () => {
            let router = _router();

            methods.concat('all').forEach((method) => {
                router[method] = (path, ...args) => {
                    const arg = args[0];

                    if (typeof arg !== 'function') {
                        args = _.drop(args);

                        router.rootRouter = router.rootRouter || [];

                        router.rootRouter.push({
                            path: arg,
                            relatedPath: path,
                            method: method,
                            args: args
                        });
                    }

                    return baseRouter[method].call(router, path, ...args);
                };
            });

            return router;
        };
    })(express.Router);
};

module.exports = app => {
    routerHold(app); // 拦截app.use && router

    // 公共服务
    app.use('/common', require('./apps/common'));

    // 业务模块
    app.use(require('./apps/channel')); // 频道页
    app.use(require('./apps/activity')); // 专题活动等活动页面
    app.use('/product', require('./apps/product')); // 商品相关页面
    app.use(require('./apps/passport')); // 登录注册
    app.use('/home', require('./apps/home')); // 会员中心
    app.use(require('./apps/brands')); // 品牌一览
    app.use('/guang/news', require('./apps/news'));  // seo-潮流资讯页
    app.use('/guang', require('./apps/guang'));  // 逛
    app.use('/cart', require('./apps/cart'));// 购物车
    app.use('/help', require('./apps/help'));// 帮助中心
    app.use('/shop', require('./apps/shop'));// 店铺
    app.use(require('./apps/about')); // 关于有货
    app.use('/download', require('./apps/download')); // 下载
    app.use('/shopping', require('./apps/shopping')); // 支付中心

    // 第三方,如广告联盟
    app.use('/3party', require('./apps/3party'));
    app.use('/service', require('./apps/service')); // 客服
};