Решение:
В файле, выделенном для проверок, создайте middleware
с scheme
для использования celebrate
(это будет простой пример для аутентификации):
import { celebrate, Joi } from 'celebrate';
export const authenticate = celebrate({
headers: Joi.object().keys({
client: Joi.string().required(),
application: Joi.string().required(),
}).unknown(),
body: Joi.object().keys({
email: Joi.string().email().required(),
password: Joi.string().required(),
}),
});
Как использовать это позже?Импортируйте его в модуль и примените его как middleware
, поскольку celebrate
возвращает функцию типа function (req, res, next)
:
import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
// Others imports ...
import { authenticate } from './validations/authenticate.validation';
@Module({
imports: [ // Your imports... ],
controllers: [ // Your controllers... ],
providers: [ // Your providers... ],
})
export class AuthenticationModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
// Validate Login.
consumer.apply(authenticate).forRoutes({ path: 'security/login', method: RequestMethod.POST });
}
}
path
, определенный в конфигурации, очевидно, должен совпадать с endpoint
контроллера:
import {
Body,
Post,
Headers,
Controller,
} from '@nestjs/common';
@Controller('security')
export class AuthenticationController {
@Post('login')
async authenticate(
@Body('email') email: string,
@Body('password') password: string,
@Headers('application') application: string): Promise<any> {
// Autenticate user
}
}
Ссылки:
https://docs.nestjs.com/middleware
https://www.npmjs.com/package/celebrate