您的位置:首页 > 其它

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

2016-01-15 00:00 169 查看
摘要: express 4 简单实现自动注册路由功能

##实现
在express,模块的lib/router/index.js 的 proto.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的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: