nest.js笔记

nest的核心概念:

Nest的核心概念是提供一种体系结构,它帮助开发人员实现层的最大分离,并在应用程序中增加抽象。

架构预览:

主要有三个核心概念:模块Module,  控制器Controller, 服务与依赖注入 Provider Dependency injection

  1. 模块Module:   用于将代码拆分为独立的和可重用的模块,例如用户信息模块,然后将该用户模块的控制器和服务集合进来,最后直接将用户模块导入到根Module就可以使用了。
  2. 控制器Controller: 负责处理客户端传入的请求参数并向客户端返回响应数据。nest.js提供许多http请求的装饰器,如例如@Body(),@Post()等。控制器不需要定义任何诸如从客户端获取数据、验证用户输入等工作,这些都是交给服务Provider处理,通过把任务委托给各种服务,可以让控制器类更加精简、高效。
  3. 服务Provider :在这里处理所有请求执行逻辑,在控制器中通过constructor函数以依赖注入的方式实现。
    constructor(private readonly catsService: CatsService) {}

其他概念:

  1. 中间件Middleware: 中间件功能可以访问请求和响应对象,在路由处理程序之前调用。
// 实现一个带有`@Injectable()`装饰器的类打印中间件
import { Injectable, NestMiddleware, MiddlewareFunction } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  resolve(...args: any[]): MiddlewareFunction {
    return (req, res, next) => {
      console.log('Request...');
      next();
    };
  }
}

使用有两种方式:全局注册和局部模块注册。

//  全局注册
async function bootstrap() {
  // 创建Nest.js实例
  const app = await NestFactory.create(AppModule, application, {
    bodyParser: true,
  });
  // 注册中间件
  app.use(LoggerMiddleware());
  // 监听3000端口
  await app.listen(3000);
}
bootstrap();
//  模块局部注册
export class CnodeModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .with('ApplicationModule')
      .exclude(
        { path: 'user', method: RequestMethod.GET },
        { path: 'user', method: RequestMethod.POST },
      )
      .forRoutes(UserController);
  }
}

全局注册影响全部路由,局部注册只是影响当前路由下的路由。

Middleware

猜你喜欢

转载自www.cnblogs.com/pjl43/p/9826748.html