【问题标题】:celebrate npm package with Nest Framework用 Nest 框架庆祝 npm 包
【发布时间】:2019-05-14 00:25:18
【问题描述】:

有没有办法将celebrate NPM packageNest Framework 一起使用?在文档中,他们只引用了class-validator,但尽管这有很多优点,但我在 Express 和其他框架中使用了庆祝中间件来验证请求。在 Nest 的情况下,中间件配置在 app.module.ts 文件中完成,但在其他情况下,routing-controllers 装饰器 @UseBefore 用于控制器中的中间件,这就是为什么我会感谢任何解释,例如或文档如何将此中间件与 Nest 一起使用。谢谢!!

【问题讨论】:

    标签: javascript node.js typescript backend nestjs


    【解决方案1】:

    解决办法:

    在专用于验证的文件中创建 middlewarescheme 以供 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 2018-05-22
      • 2019-12-27
      • 1970-01-01
      • 2021-06-07
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多