学学nodejsNodejs学习笔记Nodejs

[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

上一篇下一篇

猜你喜欢

热点阅读