UNPKG

@koa-stack/server

Version:

A web server based on koa with advanced routing, lazy body and flexbile error handling

87 lines 2.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KoaServer = exports.AbstractKoaServer = void 0; const body_1 = require("@koa-stack/body"); const router_1 = require("@koa-stack/router"); const http_1 = __importDefault(require("http")); const koa_1 = __importDefault(require("koa")); class AbstractKoaServer extends router_1.AbstractRouter { constructor(koa = new koa_1.default()) { super(); this.koa = koa; // params is an alias to $touter.params Object.defineProperty(koa.context, 'params', { get() { return this.$router.params; } }); } setup() { } onStart() { } onStop() { } /** * To be ble to use supertest directly with a KoaServer instance */ address() { return this.server && this.server.address(); } withLazyBody(opts) { body_1.LazyBody.install(this.koa, opts); return this; } callback() { return this.koa.callback(); } createServer() { return http_1.default.createServer(this.callback()); } installExitHooks() { const onSigExit = async () => { await this.stop(); process.exit(0); }; process.on('SIGINT', onSigExit); process.on('SIGTERM', onSigExit); } onServerListening() { // do nothing: you can print a server started message } async start(port, opts = {}) { await this.setup(); // add routes this.koa.use(this.middleware()); // install exit hooks if (this.onStart) { await this.onStart(); } this.installExitHooks(); // start http server return new Promise(resolve => { this.server = this.createServer(); this.server.listen(port, opts.host, opts.backlog, () => { this.onServerListening(); opts.callback && opts.callback(); resolve(this); }); }); } stop() { return new Promise(resolve => { if (this.server) { this.server.close(async () => { if (this.onStop) { await this.onStop(); } this.server = undefined; }); resolve(null); } }); } } exports.AbstractKoaServer = AbstractKoaServer; class KoaServer extends AbstractKoaServer { } exports.KoaServer = KoaServer; //# sourceMappingURL=index.js.map