[nodejs]为什么自己不为express写一个autoRou
2016-10-30 本文已影响959人
CharTen
啊♂,`php`能够写个文件就自动添加路由。。。我`nodejs`也想要~~
我知道npm上有这样相关的包,但是,为什么不考虑一下自己写(fuzhi)几行代码实现一下呢?
autoRoutes
自动路由添加代码
code in express
/*app.js*/
var list=[];
readdir(path.join(root, 'routes', 'api'), './api');
function readdir(pathname, sPath) {
var arr = fs.readdirSync(pathname);
arr.forEach(function(item) {
var next = path.join(pathname, item);
var api = sPath + '/' + item;
var stats = fs.statSync(next);
if (stats.isDirectory()) {
readdir(next, api);
} else {
var repath = api.replace('.js', '');
var obj = require(repath);
list.push(obj);
obj.success(app);
}
})
}
/*GET.js*/
module.exports = {
name: '获取静态资源列表',
route: '/api/files/*',
method: 'GET',
dataType: 'json/jsonp',
data: {
limit: '要求返回的限制条数,默认0',
page: '要求返回的页码,默认1',
cb: 'jsonp返回参数,默认为null'
},
success: function(app) {
var _this = this;
var root = app.get('rootname')
var fs = require('fs');
var path = require('path');
var pub = path.join(root, 'public');
app.get(this.route, function(req, res) {
res.end(req.url)
});
},
}
可以在文件api下自由添加路由文件,但是现在不支持根据文件路径定制路由
因为我觉得。。。要是你的需求里面是file/a/b/c/d/e?q=abc
这样的路由,
那文件夹岂不是得层级多得要死?(实际上是为了restful api考虑)
而GET.js里面其实只需要一个success
的方法就行了,但是为了方便打印,比如在app.js里面var list=[]
,然后list.push(obj)
,把遍历到的对象挂载在这个数组里,这样就可以实现:
app.get('/apis', function(req, res) {
res.json(list);
});
返回所有api,然后用可以根据GET.js里面的属性,直接渲染成接口文档,是不是特别棒?
(我才不会告诉你,使用ajax的时候直接复制粘贴呢。。。。
下面是文件路径:
root
├─app.js
├─routes
│ └─api
... ├─file
... ├─GET.js
├─POST.js
├─DELET.js
└─PUT.js
参考自文档:express-autoroute