@ditsmod/openapi-validation
To provide automatic metadata-based validation in Ditsmod applications for OpenAPI, you can use the @ditsmod/openapi-validation
module. Under the hood, this module has an integration with the ajv library, which directly performs the validation just mentioned.
Currently, automatic validation only works for HTTP requests that have a media type of application/json
and do not refer to Reference Object. Automatic validation works for parameters in:
- path
- query
- cookie
- header
- request's body.
Installation
After you create OpenAPI documentation, you need to import two modules for automatic validation based on it:
npm i @ditsmod/openapi-validation @ditsmod/i18n
Enable validation and set options
To enable automatic validation in a specific module, it is enough to import ValidationModule
there. You can also pass ValidationOptions
and AJV_OPTIONS
:
import { featureModule, Providers, Status } from '@ditsmod/core';
import { ValidationModule, ValidationOptions, AJV_OPTIONS } from '@ditsmod/openapi-validation';
import { Options } from 'ajv';
@featureModule({
imports: [ValidationModule],
providersPerApp: new Providers()
.useValue<ValidationOptions>(ValidationOptions, { invalidStatus: Status.UNPROCESSABLE_ENTRY })
.useValue<Options>(AJV_OPTIONS, { allErrors: true }),
// ...
})
export class SomeModule {}
Substituting of validation interceptors
The ParametersInterceptor
and RequestBodyInterceptor
classes are responsible for validating the request body and request parameters. They can be substituted in the providersPerReq
array at the module or controller level:
import { featureModule } from '@ditsmod/core';
import { ParametersInterceptor } from '@ditsmod/openapi-validation';
import { MyInterceptor } from './my.interceptor.js';
@featureModule({
// ...
providersPerReq: [
{ token: ParametersInterceptor, useClass: MyInterceptor }
]
// ...
})
export class SomeModule {}
Before writing your interceptor for validation, you can first review how is written, for example ParametersInterceptor.