|
|
/**
|
|
|
* 路由拦截
|
|
|
* @author: yyq<yanqing.yang@yoho.cn>
|
|
|
* @date: 2018/1/22
|
|
|
*/
|
|
|
|
|
|
const _ = require('lodash');
|
|
|
const express = require('express');
|
|
|
const methods = require('methods');
|
|
|
|
|
|
const intercept = (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);
|
|
|
};
|
|
|
|
|
|
|
|
|
// 注册根路由
|
|
|
const regist = (app, parent, router) => {
|
|
|
if (router.rootRouter && router.rootRouter.length) {
|
|
|
let rootPath = '';
|
|
|
|
|
|
if (app.locals.rootPath && _.isString(app.locals.rootPath)) {
|
|
|
rootPath = app.locals.rootPath;
|
|
|
}
|
|
|
|
|
|
router.rootRouter.forEach(el => {
|
|
|
let fullPath = rootPath;
|
|
|
|
|
|
if (el.relatedPath && _.isString(el.relatedPath)) {
|
|
|
fullPath += el.relatedPath;
|
|
|
}
|
|
|
|
|
|
const pathArr = _.compact(fullPath.split('/'));
|
|
|
|
|
|
parent[el.method](el.path, (req, res, next) => {
|
|
|
Object.assign(res.locals, {
|
|
|
module: pathArr[0] || res.locals.module,
|
|
|
page: pathArr[1] || res.locals.page
|
|
|
});
|
|
|
|
|
|
return next();
|
|
|
}, ...el.args);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
|
intercept,
|
|
|
regist
|
|
|
}; |
...
|
...
|
|