Validation
The validation
feature in LightTs equips your API with robust input validation using joi
. It generates a middleware and schemas to ensure your request data is rock-solid.
Add Validation Support
Section titled “Add Validation Support”-
Run the Command
Terminal window lts add validation -
Generate a Schema
Terminal window lts g validate user -
Apply to Routes
Use the
validate
middleware in your routes.
import { BadRequestError } from '@/core/errors/bad-request.error';import { NextFunction, Request, Response } from 'express';import Joi from 'joi';
const validate = (schema: Joi.ObjectSchema, content: 'body' | 'params' | 'query' = 'body') => { return async (req: Request, res: Response, next: NextFunction) => { const data = content == 'body' ? req.body : content == 'params' ? req.params : req.query; const valid = schema.validate(data);
if (valid.error) { var error = valid.error.details[0].message.replace(/"/g, '');
throw new BadRequestError(error); }
return next(); };};
export default validate;
import Joi from 'joi';
export default { signin: Joi.object().keys({ email: Joi.string().email().required(), password: Joi.string().required(), }),};
import { Router } from 'express';import validate from '@/middleware/validator.middleware';import validationSchema from '@/modules/user/user.schema';import service from './user.service';
const router = Router();
router.post('/signin', validate(validationSchema.signin), service.signin);
Example Service
Section titled “Example Service”import { DataResponse } from '@/core/responses/data.response';import { Request, Response } from 'express';
export default { get: async (req: Request, res: Response) => { const { email } = req.body;
return new DataResponse(res, { data: { id: 1, email }, message: 'Sign-in successful', statusCode: 200, }); },}
- Validates
req.body
against Joi schemas. - Customize schemas in
user.schema.ts
for advanced rules. - Errors return a 400 status with clear messages.
See Validation in Action Try a validated sign-in route example.