sm

smart-middleware

auto load middleware, auto matching middleware by config

Showing:

Popularity

Downloads/wk

3

GitHub Stars

2

Maintenance

Last Commit

5yrs ago

Contributors

2

Package

Dependencies

1

Size (min+gzip)

1.3KB

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Readme

smart-middleware

Travis Build Status Coverage Status npm

Router middleware for koa.

feedbacks are welcome

cn api click here

Features

  • auto loading router
  • auto matching middleware by config

Installation

install with npm

npm install smart-middleware

Usage

/*step 1 app.js*/
var sm = require('smart-middleware');
var router = require('koa-router')();
var app = require('koa-router')();

var rules = [
                    {url: '/list',
                      fn: [function *(next){
                        "use strict";
                        this.body = '_m_1';
                        yield next;
                        this.body += '_end_1';
                      }, function *(next){
                        "use strict";
                        this.body += '_m_2';
                        yield next;
                        this.body += "_end_2";
                      }
                      ]},
                    {url: '\\^(?!/open)', fn: [function *(next){
                      "use strict";
                      this.body += '_m_3';
                      yield next;
                      this.body += '_end_3';
                    }, function *(next){
                      "use strict";
                      this.body += '_m_4';
                      yield next;
                      this.body += '_end_4';
                    }]}
                    ,{url: '\\^(/open)', fn: [function *(next){
                      this.body = '_m_1';
                      yield next;
                      this.body += '_end_1';
                    }]}
                  ];
sm.autoLoading(path:__dirname +'/routers'/*required absolute path*/, {router: router/*required*/, rules: rules});
app.use(router.routes());


/*step 2 /routers/user.js*/
module.exports = function(router){
  router.get('/list', function *(next){
    this.body += '/list';
  });
  router.get('/open/user', function *(next){
    this.body += '/open/user';
  });
};
  • when you visit the '/list' url, the response body is _m_1_m_2_m_3_m_4/list_end_4_end_3_end_2_end_1
  • when you visit the '/open/user' url , the response body is _m_1/open/user_end_1

middleware roles

  • template: {url: 'url', fn: [m1,m2]}
  • if template.url begins with '\\', it will be matched by regExp, else it will be matched by '===';

middleware load rules:

  • the loading sequence is sorted by the middleware; like the example above, when middlewares are [[m1, m2], [m3, m4]], the loading sequences are [[m1, m2], [m3, m4]].

Test

npm test

Support

If you have any problem or suggestion please open an issue here.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100