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'});
  }

}
相关推荐
袁煦丞14 分钟前
Redis内存闪电侠:cpolar内网穿透第614个成功挑战
前端·程序员·远程工作
BillKu19 分钟前
Vue3组件加载顺序
前端·javascript·vue.js
IT_陈寒27 分钟前
Python性能优化必知必会:7个让代码快3倍的底层技巧与实战案例
前端·人工智能·后端
暖木生晖39 分钟前
引入资源即针对于不同的屏幕尺寸,调用不同的css文件
前端·css·媒体查询
袁煦丞1 小时前
DS file文件管家远程自由:cpolar内网穿透实验室第492个成功挑战
前端·程序员·远程工作
用户013741284371 小时前
九个鲜为人知却极具威力的 CSS 功能:提升前端开发体验的隐藏技巧
前端
永远不打烊1 小时前
Window环境 WebRTC demo 运行
前端
风舞1 小时前
一文搞定JS所有类型判断最佳实践
前端·javascript
coding随想1 小时前
哈希值变化的魔法:深入解析HTML5 hashchange事件的奥秘与实战
前端
一树山茶1 小时前
uniapp在微信小程序中实现 SSE进行通信
前端·javascript