express-ts-skeleton
Version:
This is a skeleton(boiler plate) for nodejs, express and typescript.
51 lines (50 loc) • 2.27 kB
JavaScript
;
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;