@ngserveio/you-good-nest
TypeScript icon, indicating that this package has built-in type declarations

9.0.0 • Public • Published

@ngserveio/you-good-nest

Find more at libraries and examples at NgServe.io.

Read More at Angular Tutorial - Sharing Validations Between Angular and NestJs

Running unit tests

Run nx test shared-api-validator to execute the unit tests via Jest.

Purpose

The purpose of the @ngserveio/you-good-nest library allows developers to centralize their validations for the model in the body of the request. It can be used in conjunction with @ngserveio/you-good and @ngserveio/form-services.

Validations can be shared between both the front end and backend per a combination of the services packages listed above.

See the Video Tutorial on YouTube

Shared Validators for Angular and NestJS

Implementation

Below is a sample validator that can be used between an Angular application and a NestJs application.

type ModelT = {
  firstName: string;
  email: string;
  url: string;
  jerseyNumber: number | null;
};

const model: ModelT = {
  firstName: 'Steve',
  email: 's@s.com',
  url: 'https://detroitredwings.com',
  jerseyNumber: null,
};

const modelTValidator: (item: T) => PropertyValidationErrors<T> =
  validate<ModelT>({
    firstName: propertyValidators((p) => p.firstName, [required]),
    email: propertyValidators((p) => p.email, [required, email]),
    url: propertyValidators((p) => p.url, [url]),
    jerseyNumber: propertyValidators((p) => p.jerseyNumber, [required]),
  });

modelTValidator(model); // { jerseyNumber: { required: true } }

To consume this in a Nest Application import the ValidatorInterceptorFactory from the @ngserveio/you-good-nest package.

import { Body, Controller, Post, UseInterceptors } from '@nestjs/common';
import { ValidatorInterceptorFactory } from '@ngserveio/you-good-nest';
import { emailValidator, EmailListSignup } from '@ng-serve-io/common';

@Controller()
export class AppController {
  @UseInterceptors(ValidatorInterceptorFactory(emailValidator))
  @Post()
  public postData(@Body() emailList: EmailListSignup) {
    return emailList;
  }
}

On the intercept of the request, the interceptor checks for a request body and that it passed validations. Client will receive a BadRequestException if the checks fail.

The client is left to interpret the friendly error message.

{
  "response": {
    "email": {
      // "email" is a property on the validator
      "required": true,
      "email": false // email is a validator returning a false value
    }
  },
  "status": 400,
  "message": "Bad Request Exception"
}

Package Sidebar

Install

npm i @ngserveio/you-good-nest

Weekly Downloads

1

Version

9.0.0

License

MIT

Unpacked Size

6.41 kB

Total Files

8

Last publish

Collaborators

  • ngserve