Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/overnested/nestjs-better-validation
A better validation pipe for NestJS.
https://github.com/overnested/nestjs-better-validation
graphql nestjs validation
Last synced: 3 months ago
JSON representation
A better validation pipe for NestJS.
- Host: GitHub
- URL: https://github.com/overnested/nestjs-better-validation
- Owner: overnested
- License: mit
- Created: 2021-11-11T19:39:15.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-19T19:11:54.000Z (4 months ago)
- Last Synced: 2024-07-20T00:17:57.669Z (4 months ago)
- Topics: graphql, nestjs, validation
- Language: TypeScript
- Homepage:
- Size: 227 KB
- Stars: 17
- Watchers: 1
- Forks: 2
- Open Issues: 20
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Better Validation Pipe
This pipe extends Nest's [built-in validation pipe](https://docs.nestjs.com/techniques/validation#using-the-built-in-validationpipe) and makes it a bit more descriptive.
## Introduction
The default validation pipe is great, but error it returns is just an array of errors:
```json
{
"statusCode": 400,
"error": "Bad Request",
"message": ["email must be an email", "phone should not be empty"]
}
```This package changes the `message` to be an object with field names as keys:
```json
{
"statusCode": 400,
"error": "Bad Request",
"message": [
{
"field": "email",
"errors": ["email must be an email"]
},
{
"field": "phone",
"errors": ["phone should not be empty"]
}
]
}
```It also works with [nested validations](https://github.com/typestack/class-validator#validating-nested-objects):
```json
{
"field": "nestedObject.name",
"errors": ["name should not be empty"]
}
```So then, on your frontend, you can show each error next to its relavant field, instead of showing all of them at the end of your form
## Installation
On Yarn:
```shell
yarn add nestjs-better-validation
```On NPM:
```shell
npm install nestjs-better-validation
```## Usage
Just use it as you would normally use [Nest's built-in validation pipe](https://docs.nestjs.com/techniques/validation#using-the-built-in-validationpipe). You can also pass options to it, just like you would with the built-in one.
## Motivation
This behavior is achievable by passing a custom `exceptionFactory` to the original pipe, but I found myself writing the same exception factory for each one of my projects, so I made this package to do the job.
## GraphQL Validation Filter
This filter is just what I personally use for my GraphQL responses. it catches the validation exceptions and returns them as the following object:
```ts
@ObjectType()
export class UserError {
@Field(() => [String], { nullable: true })
field: string[];@Field(() => String)
message: string;
}
```Additionally, your returned objects should contain a `userErrors` field, for example:
```ts
@ObjectType()
export class PostCreatePayload {
@Field(() => Post)
post: Post;@Field(() => [UserError])
userErrors: UserError[];
}
```To use the filter, add it filter to your main.ts file:
```ts
import { GraphqlValidationFilter } from 'nestjs-better-validation';// ...
app.useGlobalFilters(new GraphqlValidationFilter());
```