UNPKG

express-ts-skeleton

Version:

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

51 lines (50 loc) 2.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateHelper = void 0; const joi_1 = __importDefault(require("joi")); const pick_1 = require("../scripts/pick"); const response_1 = require("../scripts/response"); const response_2 = require("./response"); //MARK: validator /** * Middleware to validate request parameters, query, and body based on a schema. * @param {RouteFormat["validate"]} schema - The validation schema. * @returns {function(Request, Response, NextFunction): void} Express middleware function to validate the request. */ class validateHelper extends response_1.responseHelper { constructor() { super(...arguments); this.valid = (schema) => { return (req, res, next) => { if (schema) { const validSchema = (0, pick_1.pick)(schema, ["params", "query", "body"]); const object = (0, pick_1.pick)(req, Object.keys(validSchema)); const { error, value } = joi_1.default.compile(validSchema) .prefs({ errors: { label: "key" }, abortEarly: false }) .validate(object); if (error) { const formattedErrors = error.details.reduce((acc, { path, message }) => { const context = path[0]; acc[context] = acc[context] ? `${acc[context]}, ${message}` : message; return acc; }, {}); const data = response_2.FailureResponse.failure({ validation: formattedErrors, message: "Validation failed", error: "Validation error", }); return res.status(data.statusCode).json(data); } Object.assign(req, value); } return next(); }; }; } } exports.validateHelper = validateHelper;