8.0.0 • Published 18 days ago

@ngserveio/you-good-nest v8.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
18 days ago

@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"
}
8.0.0

18 days ago

7.6.2

3 months ago

7.6.1

5 months ago

7.0.0

10 months ago

7.4.0

6 months ago

7.3.0

6 months ago

7.2.0

6 months ago

7.0.2

9 months ago

7.0.1

10 months ago

7.6.0

6 months ago

7.5.0

6 months ago

7.0.0-alpha

10 months ago

2.1.0

1 year ago

2.0.0

1 year ago

1.5.0

2 years ago

1.4.0

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.1.0

2 years ago

1.2.1

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.2

2 years ago

1.0.3

2 years ago

1.0.0

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago