nest学习摘要(2)

nest提供者

js 复制代码
app.model 自定义名称
// 导入NestJS的Module装饰器,用于定义模块
import { Module } from '@nestjs/common';
// 导入应用控制器,负责处理HTTP请求
import { AppController } from './app.controller';
// 导入应用服务,负责业务逻辑处理
import { AppService } from './app.service';
import { AppService2 } from './app.service2';
import { UserModule } from './user/user.module';

/**
 * 应用根模块 - 整个应用的核心配置
 * 就像房子的设计图纸,定义了整个应用的结构
 * 
 * @Module装饰器告诉NestJS这是一个模块
 * 模块是组织代码的基本单位,把相关功能组合在一起
 */
@Module({
  imports: [UserModule],             
  )
  controllers: [AppController],  // 控制器数组 - 处理HTTP请求的地方,就像餐厅的服务员
  providers: [{
    provide: "abc", //这里是自定义名称
    useClass: AppService
  }, //下面的对象是自定义传值
  {
    provide: "test",  
    useValue: ['1', '2', '3']
  },
    {                        //这里可以做一些异步操作,注入使用其他的服务
      provide: "ccc",
      inject: [AppService2],
      async useFactory(AppService2) {
        return await new Promise((R) => {
          setTimeout(() => {
            R(AppService2.getHello())
          }, 5000)
        })
      }
    }
  ],
})
export class AppModule {

}

另一个controller文件是这样使用的

js 复制代码
// 导入NestJS的Controller和Get装饰器
import { Controller, Get, Inject } from '@nestjs/common';
// 导入应用服务,获取业务逻辑
import { AppService } from './app.service';

/**
 * 应用控制器 - 负责处理HTTP请求
 * 就像餐厅的服务员,接待客人并处理他们的需求
 * 
 * @Controller('get') 表示这个控制器处理所有以 /get 开头的路由
 * 比如:/get/a, /get/user 等等
 */
@Controller('get')
export class AppController {
  /**
   * 构造函数 - 依赖注入
   * 这里自动注入了AppService,就像给服务员配备了厨师
   * private readonly 表示这个属性是私有的且只读的
   */
  constructor(@Inject("abc") private readonly appService: AppService,
    @Inject("test") private readonly abc: string,
    @Inject("ccc") private readonly ccc) { } //

  /**
   * 处理 GET 请求的方法
   */
  @Get('a')
  getHello(): string {
    // 调用AppService的getHello方法获取数据
    console.log(this.ccc);

    return this.ccc;
  }

}

那比如我App想调用user模块的服务,该如何操作呢?

js 复制代码
//1.首先在user的model里exports:['userService']

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [UserService],
  exports:[UserService]
})
export class UserModule {}

//2.然后就可以在app.controller里使用了
import { UserService } from './user/user.service'
@Controller('get')
export class AppController {
  /**
   * 构造函数 - 依赖注入
   * 这里自动注入了AppService,就像给服务员配备了厨师
   * private readonly 表示这个属性是私有的且只读的
   */
  constructor(@Inject("abc") private readonly appService: AppService,
    @Inject("test") private readonly abc: string,
    @Inject("ccc") private readonly ccc,
    private readonly userService: UserService) { }// 必须明确类型,否则会报错

  /**
   * 处理 GET 请求的方法
   */
  @Get('a')
  getHello() {
    // 调用AppService的getHello方法获取数据
    console.log(this.ccc);
    return this.userService.findAll({code:123,name:'qqq'});
  }

}
相关推荐
剪刀石头布啊10 小时前
vue-react为何要虚拟dom
前端
剪刀石头布啊10 小时前
ahooks常用的一些库,我们使用一下
前端
剪刀石头布啊10 小时前
从git更新本地提交记录到更新已经推送到远端记录
前端
Flynt12 小时前
axios 被投毒半年后,我把 npm 的"安全防线"实测了一遍:最信任的 SHA512 是安慰剂
前端·npm·node.js
excel12 小时前
Base62 和 Base64 有什么区别?
前端
风骏时光牛马14 小时前
大模型底层架构与AI源码深度剖析
前端
掘金挖土14 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
中文呀17 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进17 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端