UNPKG

express-ts-skeleton

Version:

This is a skeleton(boiler plate) for nodejs, express and typescript.

56 lines (55 loc) 2.95 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.httpHelper = void 0; const checkResponseType_1 = require("../scripts/checkResponseType"); const validator_1 = require("./validator"); // MARK: httpHandler /** * Creates an Express middleware function to handle requests using a specified controller method. * @param {ControllerClass} controller - The controller class containing the method to handle requests. * @param {string} handlerName - The name of the method on the controller to handle requests. * @returns {function(Request, Response, NextFunction): Promise<void>} An async middleware function to process the request. */ class httpHelper extends validator_1.validateHelper { constructor() { super(...arguments); this.handler = (controller, handlerName) => { return (req, res, next) => __awaiter(this, void 0, void 0, function* () { try { const controllerInstance = new controller(); const methodHandler = controllerInstance[handlerName]; if (typeof methodHandler !== "function") { throw new Error(`Method ${handlerName} not found on controller`); } const result = yield methodHandler(Object.assign(Object.assign(Object.assign(Object.assign({}, req.body), req.params), req.query), { files: req.files || req.file })); if (result.metaData) for (const item in result.metaData) { res.setHeader(item, result.metaData[item]); } if (checkResponseType_1.checkResponseType.isDownloadResponse(result)) { this.download(result, res); } else if (checkResponseType_1.checkResponseType.isRenderResponse(result)) { this.render({ view: result.view, content: result.content }, res); } else { this.json(result, res); } } catch (err) { next(err); } }); }; } } exports.httpHelper = httpHelper;