Last active
November 4, 2017 10:15
-
-
Save axetroy/a3250a136e474a59371495237f319833 to your computer and use it in GitHub Desktop.
整合koa + koa-router
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Koa = require('koa'); | |
const Router = require('koa-router'); | |
const methods = require('methods'); | |
const router = new Router(); | |
const KOA = Symbol('koa instance'); | |
class Server { | |
constructor() { | |
this[KOA] = new Koa(); | |
} | |
get koa() { | |
return this[KOA]; | |
} | |
use(middleware) { | |
this[KOA].use(middleware); | |
return this; | |
} | |
route(url, router) { | |
url = url === '*' ? '/' : url; | |
const newRouter = new Router(); | |
if (router instanceof Router) { | |
newRouter.use(url, router.routes(), router.allowedMethods()); | |
} else if (typeof router === 'function') { | |
newRouter.get(url, router); | |
} | |
return this.use(newRouter.routes()); | |
} | |
listen(port) { | |
return this[KOA].listen(port); | |
} | |
} | |
methods.forEach(method => { | |
Object.defineProperty(Server.prototype, method, { | |
value: function(url, handler) { | |
const newRouter = new Router(); | |
newRouter[method.toLowerCase()](url, handler); | |
return this.use(newRouter.routes()); | |
} | |
}); | |
}); | |
Object.freeze(Server); | |
Object.freeze(Server.prototype); | |
module.exports = Server; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment