默认情况下,express的路由写起来还挺麻烦的。比如下面这样:
app.get('/blacklists/', get_all); app.get('/blacklists/:id', get_all); app.post('/blacklists/:id', update); app.post('/blacklists', create); app.detete('/blacklists/:id' : del);
这样写是什么大的问题,至少它能正常运行。但有二个小问题:
1、不便于以后的扩展和维护,如果需要监听的URL越来越多,它看上去就会越来越糟糕了;
2、不够灵活,如果还需要对“hello”、“aa”…进行监听,所有的代码处理都被放在一个地方了,只会越来越臃肿;
有没有比较好的方案对路由的处理管理和配置呢?
我们可以使用“惯例优先原则”来定义好一个约定:我期望的是所有的路由相关的处理,都放在项目文件路径下,一个名为“routes”的文件夹里,里面可以可以再建立N层文件夹,而每一个js文件,仅处理以该文件名为路径的请求,如上面的“blacklists”相关的处理全部放在blacklists.js文件内。如何实现呢?
1、获取当前项目routes目录内所有的文件(包含子文件夹);
2、加载每一个文件,获取指定属性下的配置,如果存在,就动态拼接成如文章开头的配置,如:app[method](path, func);
部分实现代码:
运行后的效果如下:

如果routes有同名的两个js文件,分属于不同的文件夹,那会是怎么样的结果呢?假设dd目录下也有相同的一个js文件hello.js
运行后的效果:
而控制台上也会显示当前监听的url
如此一来,我们的开发就会很方便了。
安装:
npm install express-autoroute
使用:
var autorouter = require('express-autoroute');
autorouter(app); //其中app = express();
有兴趣的可以读读它的源码,这篇文章本来就是参数它来的:)