отмечать пакет npm с Nest Framework - PullRequest
0 голосов
/ 12 декабря 2018

Есть ли способ использовать праздновать пакет NPM с Nest Framework ?В документации они ссылаются только на class-validator , но, хотя у этого есть много преимуществ, я использовал с Express и другими платформами промежуточное программное обеспечение для проверки запроса.В случае Nest конфигурация промежуточного программного обеспечения выполняется в файле app.module.ts, но в других случаях routing-controllers декоратор @UseBefore используется для промежуточного программного обеспечения в контроллерах, поэтому яБуду признателен за любое объяснение, пример или документацию, как использовать это промежуточное ПО с NestСпасибо !!

1 Ответ

0 голосов
/ 20 декабря 2018

Решение:

В файле, выделенном для проверок, создайте 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

...