express 4 简单实现自动注册路由功能

为什么80%的码农都做不了架构师?>>>   hot3.png

##实现 在express,模块的lib/router/index.jsproto.route 方法定义附件添加代码,实现自动注册路由方法:


var fs = require("fs");
var Path = require("path");/*** 添加自动注册路由方法* @param  {string} path 注册路由的当前目录* @return*/proto.regist = function(dir, options) {options = options || {};options.ignore = options.ignore || [];options.ignore.push('index.js');var that = this;if (options.file) {options.files = options.files || [];options.files.push(options.file);}if (!options.files) {fs.readdirSync(dir).filter(function(file) {return ((options.ignore.indexOf(file) == -1));}).forEach(function(file) {var fileName = file.split('.')[0];that.use((options.param ? ('/:' + options.param) : '') + '/' + fileName, require(Path.resolve(dir, file)));});} else {options.files.forEach(function(file) {var fileName = file.split('.')[0];that.use((options.param ? ('/:' + options.param) : '') + '/' + fileName, require(Path.resolve(dir, file)));});}
};

2017-02-28 10:41:56 增加 路由 params 参数

源码中在路由中定义了 mergeParams 继承父路由的 params 参数,但是在源码中初始化时候并未使用 mergeParams方法,估计是源码的bug。进行如下修改:

--57   router.mergeParams = opts.mergeParams ;
++57 router.mergeParams = opts.mergeParams || mergeParams;

##使用

首先在app.js中加载routers的路由主入口,

var routes = require('./routes/index');
//在其他中间件加载完成后,加载主路由
app.use('/', routes);

在路由的各目录中的index.js中调用router的regist方法:

var router = require('express').Router();/* GET home page. */
router.get('/', function(req, res, next) {res.render('index', {title: 'SatanRabbit'});
});router.regist(__dirname,{param:'website'});module.exports = router;

在所有的子路由中将会将当前目录的文件自动解析为 'dir/:website/fileName/',注册fileName.js里exports的方法。

转载于:https://my.oschina.net/xqx/blog/603461

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

速战速决?你不会是不行吧......

1 真服了!!▼2 同猫不同命......▼3 无锡:??▼4 还是黄金好?▼5 你会不会是不行??▼6 爸爸:那也太惊喜了...▼7 倒是毫无违和感?▼8 皇上您说的对&…

mysql普通标转分区表_MySQL分区表到普通表互转

由于最近总有人抱怨,数据迁移后执行SQL变慢,经过查看原来是分区导致的问题。原分区根据按月设置RANGE分区,看到这图的时候也许有人就会发现问题.......业务查询SQL:从SQL上看 执行计划确实是走了分区,但为什么没有命中…

C# 用IrisSkin4.dll美化你的WinForm

1. 将IrisSkin4.dll动态文件导入当前项目引用中。具体操作为:解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin4.dll文件,然后加入即可。建议,最好把IrisSkin4.dll文件放在当前项目\bin\Debug文件中…

全球最大油田、金矿、煤矿、铁矿、铜矿,究竟哪个最值钱?

全世界只有3.14 % 的人关注了爆炸吧知识1世界上最大油田:沙特加瓦尔油田(Ghawar Oil field)加瓦尔油田位于沙特阿拉伯东部,首都利雅得以东约500km处,它探明的石油可采储量为114.8亿吨,天然气储量9240亿立方…

MVC3快速搭建Web应用(二)

easyui与mvc的结合 上一篇文章发布后,自己又仔细读了数遍,感觉一是文笔太差,二是描述逻辑比较混乱,客观原因是涉及到东西其实蛮多的,那三个步骤不可能在一篇短短的文章中就可以描述清楚。此篇笔者将尽量更加详尽一些。…

这个发热鞋垫厉害了,有它冬天再也不怕脚冷

▲ 点击查看冬天一到,小爆发现身边的“抖友”又开始上线了!至于为什么会抖脚?有盆友说,当然不是真的想抖,而是因为脚太冷冷冷了!有时候穿了棉袜厚鞋,脚都是冷冰冰的,感觉就像踩在冰窟…

.NET 6新特性试用 | 热重载

前言在以前的开发模式下,我们修改代码后必须重新编译、重新运行才能看到效果。而热重载提供了这样一种特性,它允许你在项目正在运行时修改代码,并将代码更改立即应用于正在运行的应用程序上。热重载的目的是尽可能节省编辑之间的应用重启次数…

加速你的Hibernate引擎(上)

为什么80%的码农都做不了架构师?>>> 1.引言 Hibernate是最流行的对象关系映射(ORM)引擎之一,它提供了数据持久化和查询服务。 在你的项目中引入Hibernate并让它跑起来是很容易的。但是,要让它跑得好却是需…

Spring MVC 中 HandlerInterceptorAdapter过滤器的使用

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理、后处理。 Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度。 Spring为我们提供了org.springframework.web.s…

7部必看的纪录片,每一部都堪称经典,让人叹为观止!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片的一大重要意义,就在于它能将我们的视野和脚步,引向我们无法企及的地方和领域,又能让那些我们曾经到过的地方、经历过的人事,变得更有深意。今天,就给大家分享7部顶级纪录…

通过SQL Server操作MySQL的步骤和方法

在多种数据库环境下,经常会遇见在不同数据库之间转换数据和互相进行操作的情况。以下简要介绍下用SQL Server操作MySQL的步骤和方法。 1 操作前的准备 1.1 安装MySQL驱动 想要在SQL Server中操作MySQL,首先要在SQL Server所在的服务器上安装MySQL的驱动。…

ubuntu 新增mysql用户_Ubuntu中给mysql添加新用户并分配权限

一.Ubuntu下启动mysql方法:/etc/init.d/sudo mysqld二.用户添加bingt;mysql -u rootmysqlgt; grant 权限1,权限2,...权限n on一.Ubuntu下启动mysql方法:/etc/init.d/sudo mysqld二.用户添加bin>mysql -u rootmysql> grant 权限1,权限2,...权限n on…

ABP Framework 5.0 RC.1 新特性和变更说明

.Net 6.0 发布之后,ABP Framework 也在第一时间进行了升级,并在一个多星期后(2021-11-16)发布了 5.0 RC.1 ,新功能和重要变更基本已经确定。5.0版本新特性5.0版本新特性列表:•静态 C# 和 JavaScript 客户端…

土木工程到底有多惨?哭了哭了......

1 那我要去女寝当宿管!(素材来源网络,侵删)▼2 别说了快哭了▼3 今夜我们都是尾款人▼4 童叟无欺,与图片完全一致▼5 好样的,兄弟!▼6 土木工程有多惨?(素材来源网络…

Easy UI中dategrid的getSelections方法只能获取一个id的解决办法

解决方案:检查idField属性值是否与json数据中的id相同(区分大小写) 实在不行就 去掉 idField属性 也可以解决问题 具体效果请看图: 转载于:https://www.cnblogs.com/hanfeng1949/archive/2013/05/28/3104288.html

.NET 6新特性试用 | Controller支持IAsyncDisposable

前言在.NET中,拥有非托管资源的类通常会实现IDisposable接口,以提供一种同步释放非托管资源的机制。但是,在某些情况下,需要提供一种异步机制来释放非托管资源,这时候可以实现IAsyncDisposable接口。在实现此接口后&am…

ngnix之rewrite

2019独角兽企业重金招聘Python工程师标准>>> REWITE重写[rootlocalhost nginx]# cd conf[rootlocalhost conf]# lsfastcgi.conf koi-win scgi_paramsfastcgi.conf.default mime.types scgi_params.defaultfastcgi_params …

清华博士生放弃科研,跑去当中学教师,值得吗?

全世界只有3.14 % 的人关注了爆炸吧知识本文来源:科学网博客 作者:程代展原清华大学程代展教授数年前发表博文《昨夜无眠,为了一个学生》,叙述一个亲传徒弟转行的事情。该文曾激起对科研有兴趣的网友的关注,也引发了人…

C# 中如何一次 catch 多个异常?

咨询区 Michael Stum:在项目开发中当抛出异常时,我会简单的用 System.Exception,但这种会捕获所有的异常,我不希望大一统,我只想捕获我预知的几个异常,然后在这里处理一些特定的业务逻辑。目前我只能这么实…

Android之二维码生成和识别

二维码 1、ZXing库介绍 这里简单介绍一下ZXing库。ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。目前支持以下格式:UPC…