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

##实现 在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值