UNPKG

@micro.ts/core

Version:

Microservice framework with Typescript

88 lines (87 loc) 3.42 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.ExpressBroker = void 0; const HttpBroker_1 = require("../HttpBroker"); const express_1 = __importDefault(require("express")); class ExpressBroker extends HttpBroker_1.HttpBroker { constructor() { super(...arguments); this.name = 'ExpressBroker'; this.requestMapper = (r) => __awaiter(this, void 0, void 0, function* () { const action = { request: { headers: r.headers, body: r.body, method: r.method, qs: r.query, params: r.params, raw: r, path: r.path, }, connection: r.app, }; return action; }); } construct() { this.server = (0, express_1.default)(); } paramWrapper(paramName) { return `:${paramName}`; } /** * Register single express handler * @param value * @param route * @param method */ registerHandler(value, route, method) { this.server[method](route, (req, res) => __awaiter(this, void 0, void 0, function* () { const action = yield this.requestMapper(req); const handler = this.actionToRouteMapper(route, action, value); const result = yield handler(action); result.response = result.response || {}; return this.respond(result, res); })); } /** * Respond to express request * @param result * @param ctx */ respond(result, ctx) { const body = result.response.body || result.response.error; const headers = result.response.headers || {}; ctx.status(result.response.statusCode || 200); Object.keys(headers).forEach((h) => { ctx.setHeader(h, headers[h]); }); ctx.send(body); } start() { return __awaiter(this, void 0, void 0, function* () { this.registerRoutes(); yield new Promise((resolve) => { this.server.listen(this.config.port, this.config.address, () => { resolve(); }); 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}`); }); } } exports.ExpressBroker = ExpressBroker;