NodeJs 实现动态路由 优化配置

正常NodesJs 路由配置 是这样的

const app = require('express')();

app.get('/', (req, res) => {
  // ...
});

项目中经常会对目录结构进行 MVC 的分层,所以很多情况下会这样组织代码:

  • 定义一个 controller
exports.renderHomepage = (req, res) => {
  res.render('home');
};
  • 定义一个 router
const homeController = require('/path/to/controller');
app.get('/home', homeController.renderHomepage);

当然这边一般会使用 express.Router() 对 router 进行拆分,当然这并不在这次的讨论中。

这样的声明和定义方式确实没有什么问题,但是当项目在日积月累的迭代过程中,这一部分代码就会变得十分冗余。

因此需要实现一种自动路由加载的机制,而不再需要去写这些可以简化的代码。

  • 目录树如下
 controllers
├── home
│   └── index.js
└── list
    └── index.js
  • 在入口文件(如:app.js) 写入以下代码
const app = require('express')();
const glob = require('glob');

/**
 * 自动遍历项目数  遍历成接口方法
 */
glob('./controllers/**/*.js', {}, (err, files) => {
    files.forEach(file => {
        const instance = require(file);
        const urlPath = file.replace('./controllers', '').replace(/\.[^.]*$/g, '');
        const methods = Object.keys(instance);
        methods.forEach(method => {
            app[method.toLowerCase()](urlPath, instance[method]);
        });
    })
})

这样路由加载和核心就写的差不多了,还是十分简洁精炼的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值