nodejs 实践:express 最佳实践(六) express 自省获得所有的路由

某些情况下,你需要知道你的应用有多少路由,这在 express 中没有方法可以。因此我这边曲线了一下,做成了一个函数进行处理。遍历所有的方法进行处理。

代码


const _ = require('lodash');
const md5 = require('md5'); const APP_USED = [];
const ROUTER = {}; function printRouter() {
_.each(APP_USED, function(used) {
_.each(used.app._router.stack, function(stackElement) {
if (stackElement.name === 'router') {
stackElement.handle.stack.forEach((f) => {
let path = f.route.path;
let method = f.route.stack[0].method.toUpperCase(); // console.log(method + ' -> ' + used.urlBase + path);
_.updateWith(ROUTER, [used.urlBase], function(n) {
if (n) {
n.push({
method,
path: used.urlBase + path
});
} else {
n = [];
} return n;
});
});
}
});
}); let result = {}; _.forEach(ROUTER, function(val) {
val.forEach(v => {
result[v.path] = md5(v.path);
});
}); return result;
} module.exports = function(app) {
let oldUse = app.use; app.use = function() {
let urlBase = ''; if (typeof arguments[0] === 'string') {
urlBase = arguments[0];
} _.forEach(arguments, function(arg) {
if (arg.name === 'app') {
APP_USED.push({
urlBase: urlBase,
app: arg
});
}
}); oldUse.apply(app, arguments);
}; return printRouter;
};

如何使用

在所有的路由中间件之前使用。

nodejs 实践:express 最佳实践(六) express 自省获得所有的路由的更多相关文章

  1. nodejs 实践:express 最佳实践系列

    nodejs 实践:express 最佳实践系列 nodejs 实践:express 最佳实践(一) 项目结构 nodejs 实践:express 最佳实践(二) 中间件 nodejs 实践:expr ...

  2. nodejs 实践:express 最佳实践 (一)

    express 最佳实践 (一) 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色,, 在 web同构 方面, nodejs 的优势 ...

  3. nodejs 实践:express 最佳实践(四) express-session 解析

    nodejs 实践:express 最佳实践(四) express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs ...

  4. nodejs 实践:express 最佳实践 (一) 项目结构

    express 最佳实践 (一) 第二篇: express 最佳实践(二):中间件 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色 ...

  5. nodejs 实践:express 最佳实践(三) express 解析

    nodejs 实践:express 最佳实践(三) express 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固, ...

  6. nodejs 实践:express 最佳实践(五) connect解析

    nodejs 实践:express 最佳实践(五) connect解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需 ...

  7. nodejs 实践:express 最佳实践(七) 改造模块 connect2 解析

    nodejs 实践:express 最佳实践(七) 改造模块 connect2 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的 ...

  8. nodejs 实践:express 最佳实践(八) egg.js 框架的优缺点

    nodejs 实践:express 最佳实践(八) egg.js 框架的优缺点 优点 所有的 web开发的点都考虑到了 agent 很有特色 文件夹规划到位 扩展能力优秀 缺点 最大的问题在于: 使用 ...

  9. nodejs 实践:express 最佳实践(二) 中间件

    express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...

随机推荐

  1. [Poi2011] Meteors(从不知所措到整体二分)

    Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The plan ...

  2. CF331B Cats Transport[斜率优化dp+贪心]

    luogu翻译 一些山距离起点有距离且不同,m只猫要到不同的山上去玩ti时间,有p个铲屎官人要去把所有猫接走,步行速度为1单位每秒,从1走到N座山不停下,必须在猫玩完后才可以把他带走.可以提前出发.问 ...

  3. eclipse 上svn插件的安装,百度知道

    打开eclipse -> Help ->Install New Software选项, 点击Add按钮   根据需要,添加自己需要的版本svn控制器的版本,填写name和url,点击ok. ...

  4. Java Security(JCE基本概念)

    Java Security网络环境中的安全隐患计算机安全OSI参考结构模型五类安全服务八类安全机制网络环境中的安全隐患1. 存储问题: 移动存储设备存储数据没有加密存在的安全隐患 2. 通信问题: 用 ...

  5. QualType in clang

    http://clang.llvm.org/docs/InternalsManual.html#the-qualtype-class the QualType class is designed to ...

  6. 关于SetTimer间隔小于OmTimer执行时间的问题

    如果SetTimer的时间间隔为t,其响应事件OnTimer代码执行一遍的时间为T,且T>t.这样,一次未执行完毕,下一次定时到,这时候程序会如何执行? 可能的情况:1.丢弃还未执行的代码,开始 ...

  7. js的prototype的详解(1)

    一.什么是JavaScript中对象的prototype属性 JavaScript中对象的prototype属性,是用来返回对象类型原型的引用的.我们使用prototype属性提供对象的类的一组基本功 ...

  8. Django 之 requirement.txt 依赖文件生成

    通过依赖文件,别人在使用我们的项目时,不需要再一个个去安装所需模块,只需安装依赖文件即可. 1. 导出整个虚拟环境依赖 # 在项目根目录中,打开终端执行以下命令 # 生成 requirements.t ...

  9. Java负数的位运算

    /** * 求负数的位运算 *///1. -10 >> 2 = ?//2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位 ...

  10. 实现简易版shell

    操作系统小组作业,实现一个简易shell,shell实现了下列命令 exit------退出终端命令 clr-------清屏命令 time-----时间命令 myshell----欢迎命令 quit ...