UNPKG

@micro.ts/core

Version:

Microservice framework with Typescript

77 lines (76 loc) 3.29 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.KoaBroker = void 0; const HttpBroker_1 = require("../HttpBroker"); const koa_1 = __importDefault(require("koa")); const koa_router_1 = __importDefault(require("koa-router")); const koa_bodyparser_1 = __importDefault(require("koa-bodyparser")); class KoaBroker extends HttpBroker_1.HttpBroker { constructor() { super(...arguments); this.name = "KoaBroker"; this.router = new koa_router_1.default(); this.requestMapper = (r) => __awaiter(this, void 0, void 0, function* () { const action = { request: { headers: r.headers, body: r.request.body, method: r.method, qs: r.query, params: r.params, raw: r, path: r.path }, connection: r.app }; return action; }); } paramWrapper(paramName) { return `:${paramName}`; } respond(result, ctx) { const body = result.response.body || result.response.error; const headers = result.response.headers || {}; ctx.status = result.response.statusCode || 200; ctx.body = body; ctx.set(headers); return ctx; } registerHandler(value, route, method) { this.router[method](route, (ctx) => __awaiter(this, void 0, void 0, function* () { const action = yield this.requestMapper(ctx); const handler = this.actionToRouteMapper(route, action, value); const result = yield handler(action); result.response = result.response || {}; return this.respond(result, ctx); })); } start() { return __awaiter(this, void 0, void 0, function* () { this.registerRoutes(); this.server.use((0, koa_bodyparser_1.default)()); this.server.use(this.router.routes()); this.server.listen(this.config.port, this.config.address); this.server.on("error", (e) => this.handleConnectionError(e)); this.server.on("close", (e) => this.handleConnectionError(e)); console.log(`Server listening on address ${this.config.address} and port ${this.config.port}`); }); } construct() { this.server = new koa_1.default(); } } exports.KoaBroker = KoaBroker;