啊♂,`php`能夠?qū)憘€(gè)文件就自動(dòng)添加路由。。。我`nodejs`也想要~~
我知道npm上有這樣相關(guān)的包,但是,為什么不考慮一下自己寫(fuzhi)幾行代碼實(shí)現(xiàn)一下呢?
autoRoutes
自動(dòng)路由添加代碼
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: '獲取靜態(tài)資源列表',
route: '/api/files/*',
method: 'GET',
dataType: 'json/jsonp',
data: {
limit: '要求返回的限制條數(shù),默認(rèn)0',
page: '要求返回的頁碼,默認(rèn)1',
cb: 'jsonp返回參數(shù),默認(rèn)為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下自由添加路由文件,但是現(xiàn)在不支持根據(jù)文件路徑定制路由
因?yàn)槲矣X得。。。要是你的需求里面是file/a/b/c/d/e?q=abc
這樣的路由,
那文件夾豈不是得層級(jí)多得要死?(實(shí)際上是為了restful api考慮)
而GET.js里面其實(shí)只需要一個(gè)success
的方法就行了,但是為了方便打印,比如在app.js里面var list=[]
,然后list.push(obj)
,把遍歷到的對(duì)象掛載在這個(gè)數(shù)組里,這樣就可以實(shí)現(xiàn):
app.get('/apis', function(req, res) {
res.json(list);
});
返回所有api,然后用可以根據(jù)GET.js里面的屬性,直接渲染成接口文檔,是不是特別棒?
(我才不會(huì)告訴你,使用ajax的時(shí)候直接復(fù)制粘貼呢。。。。
下面是文件路徑:
root
├─app.js
├─routes
│ └─api
... ├─file
... ├─GET.js
├─POST.js
├─DELET.js
└─PUT.js
參考自文檔:express-autoroute