# AJV beta
This tutorial shows you how you can validate your data with decorators.
Validation feature uses Ajv and json-schema to perform the model validation.
# Installation
Before using the validation decorators, we need to install the ajv module.
npm install --save ajv
npm install --save @tsed/ajv
1
2
2
Then import @tsed/ajv
in your Server:
import {Configuration} from "@tsed/common";
import "@tsed/ajv"; // import ajv ts.ed module
@Configuration({
rootDir: __dirname
})
export class Server {
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
The AJV module allows a few settings to be added through the ServerSettings (all are optional):
- options are AJV specific options passed directly to the AJV constructor,
- errorFormatter can be used to alter the output produced by the
@tsed/ajv
package.
The error message could be changed like this:
import {Configuration} from "@tsed/common";
import "@tsed/ajv"; // import ajv ts.ed module
@Configuration({
rootDir: __dirname,
ajv: {
errorFormatter: (error) => `At ${error.modelName}${error.dataPath}, value '${error.data}' ${error.message}`,
verbose: true
},
})
export class Server {}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# Decorators
Ts.ED gives some decorators to write your validation model:
- Schema
- AdditionalProperties
-
AllowTypes - Any
- Const
- Default
- Enum
- ExclusiveMaximum
- ExclusiveMinimum
- Format
- Integer
- MaxItems
- MaxLength
- Maximum
- MinItems
- MinLength
- Minimum
- MultipleOf
- Pattern
- CollectionOf
- UniqueItems
- Allow
- Required
# Examples
# Model validation
A model can be used on a method controller along with @BodyParams or other decorators, and will be validated by Ajv.
import {Required, MaxLength, MinLength, Minimum, Maximum, Format, Enum, Pattern, Email} from "@tsed/common";
export class CalendarModel {
@MaxLength(20)
@MinLength(3)
@Required()
title: string;
@Minimum(0)
@Maximum(10)
rating: number;
@Email()
email: string;
@Format("date") // or date-time, etc...
createDate: Date;
@Pattern(/hello/)
customInput: string;
@Enum("value1", "value2")
customInput: "value1" | "value2";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Validation error
When a validation error occurs, AJV generates a list of errors with a full description like this:
[
{
"keyword": "minLength",
"dataPath": ".password",
"schemaPath": "#/properties/password/minLength",
"params": {"limit": 6},
"message": "should NOT be shorter than 6 characters",
"modelName": "User"
}
]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
This information can be retrieved in the response headers:
connection: keep-alive
content-length: 18
content-type: text/html; charset=utf-8
date: Wed, 16 May 2018 07:32:23 GMT
errors: [{"keyword": "minLength","dataPath": ".password", "schemaPath": "#/properties/password/minLength", "params": {"limit": 6}, "message": "should NOT be shorter than 6 characters", "modelName": "User"}]
etag: W/"12-Bpa0T7/lBA6+IACzRWwBc4S6NUY"
vary: Accept-Encoding
x-powered-by: Express
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- Session & cookies
- Passport.js
- TypeORM
- Mongoose
- GraphQL
- Socket.io
- Swagger
- AJV
- Multer
- Serve static files
- Templating
- Throw HTTP Exceptions
- Customize 404
- AWS
- Jest
- Seq
- Controllers
- Providers
- Model
- Converters
- Middlewares
- Pipes
- Interceptors
- Authentication
- Hooks
- Injection scopes
- Custom providers
- Custom endpoint decorator
- Testing