1.1.5 • Published 5 months ago

@nodeboot/starter-validation v1.1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Node-Boot Starter Validation

Overview

The @nodeboot/starter-validation package provides an auto-configuration mechanism for request validation in Node.js applications using class-validator. This package integrates with the Node-Boot framework and supports Express, Fastify, and Koa.

Features

  • Automatic request validation for body and params
  • Customizable validation rules via app-config.yaml
  • Global validation middleware
  • Supports multiple application frameworks
  • Fine-grained control over validation per parameter

Installation

npm install @nodeboot/starter-validation class-validator class-transformer

Enabling Validations

To enable validations, use the @EnableValidations decorator in your application class:

import "reflect-metadata";
import {Container} from "typedi";
import {NodeBoot, NodeBootApp, NodeBootApplication, NodeBootAppView} from "@nodeboot/core";
import {ExpressServer} from "@nodeboot/express-server";
import {EnableDI} from "@nodeboot/di";
import {EnableComponentScan} from "@nodeboot/scan";
import {EnableValidations} from "@nodeboot/starter-validation";

@EnableDI(Container)
@EnableValidations()
@EnableComponentScan()
@NodeBootApplication()
export class App implements NodeBootApp {
    start(): Promise<NodeBootAppView> {
        return NodeBoot.run(ExpressServer);
    }
}

Configuration

Validation settings can be customized in app-config.yaml under api.validations:

api:
    validations:
        enableDebugMessages: false
        skipUndefinedProperties: false
        skipNullProperties: false
        skipMissingProperties: false
        whitelist: false
        forbidNonWhitelisted: false
        forbidUnknownValues: true
        stopAtFirstError: false

Usage

Defining DTOs

Define a Data Transfer Object (DTO) using class-validator decorators:

import {IsString, IsEmail, MinLength} from "class-validator";

export class UserDto {
    @IsEmail()
    email: string;

    @MinLength(6)
    password: string;
}

Applying DTO to Controllers

The validation is automatically applied to body and params. You can also define it explicitly for specific parameters:

import {Controller, Post, Body} from "@nodeboot/core";
import {UserDto} from "../dtos/user.dto";

@Controller("/users")
export class UserController {
    @Post("/login")
    login(@Body({validate: true}) user: UserDto) {
        console.log(`${user.email} is a valid e-mail!`);
        console.log(`${user.password.length} is at least 6 characters long!`);
    }
}

If validation fails, a 400 Bad Request response is returned with validation details.

Example Response (Validation Error)

{
    "name": "BadRequestError",
    "message": "minLength->password must be longer than or equal to 9 characters",
    "errors": [
        {
            "value": "string",
            "property": "password",
            "constraints": {
                "minLength": "password must be longer than or equal to 9 characters"
            }
        }
    ]
}

Fine-Grained Control

If you want to turn on validation for only specific parameters, you can use:

@Post("/register")
register(@Body({ validate: true }) user: UserDto) {}

This technique works not only with @Body but also with @Param, @QueryParam, @BodyParam, etc.

For more advanced usage, refer to class-validator documentation.

License

This package is licensed under the MIT License.

1.1.5

5 months ago

1.1.4

5 months ago

1.1.3

6 months ago

1.1.2

7 months ago

1.1.1

7 months ago

1.1.0

7 months ago

1.0.10

8 months ago

1.0.9

8 months ago

1.0.8

8 months ago

1.0.7

8 months ago

1.0.6

8 months ago

1.0.5

8 months ago

1.0.4

9 months ago

1.0.3

9 months ago

1.0.2

9 months ago

1.0.1

9 months ago