@ngserveio/you-good-nest
v9.0.0
Published
An interceptor that utilizes the @ngserveio/you-good validations to check if the body passes validations.
Downloads
135
Readme
@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
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: '[email protected]',
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"
}