Skip to content

Instantly share code, notes, and snippets.

@axetroy
Last active November 4, 2017 10:15
Show Gist options
  • Save axetroy/a3250a136e474a59371495237f319833 to your computer and use it in GitHub Desktop.
Save axetroy/a3250a136e474a59371495237f319833 to your computer and use it in GitHub Desktop.
整合koa + koa-router
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