UNPKG

kk-router

Version:

Router middleware for koa. Based koa-router,has regExp filter.

64 lines (55 loc) 1.53 kB
/** * Created by menzhongxin on 2016/10/26. */ var METHOD = ['get', 'post', 'put', 'delete']; var util = require('./utils.js'); var BaseRouter = function(options){ "use strict"; this.options = options; }; module.exports = BaseRouter; /** * 迭代在路由头部插入中间件,按照中间件的顺序添加 * @param args * @param middleware */ var insertMiddleware = function(args, middleware){ "use strict"; !util.isArray(middleware) && (middleware = [middleware]); for(var i = 0; i < middleware.length; i ++) { args.insert(i + 1, middleware[i]); } }; /** * 匹配method * @param args * @param method * @param options */ var doMethod = function(args, method, options){ "use strict"; var url = args[0] , router = options.router , middlewares = options.middleware || [] , middleware; if(typeof url !== 'string') throw new Error('miss url !'); if(!util.isArray(middlewares)){ throw new Error('options.middleware should be a Array!'); } for(var i = 0 ; i < middlewares.length; i++){ middleware= middlewares[i]; if(middleware.url.indexOf('\\') == 0){ new RegExp(middleware.url.substring(1), 'i').test(url) && insertMiddleware(args, middleware.fn); }else{ (middleware.url === url) && insertMiddleware(args, middleware.fn); } } router[method].apply(router, args); }; METHOD.forEach(function(method){ "use strict"; BaseRouter[method] = function(){ doMethod(Array.prototype.slice.call(arguments), method, this.options); }; });