为什么80%的码农都做不了架构师?>>>
##实现 在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的方法。