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

}
相关推荐
我是天龙_绍32 分钟前
浏览器指纹,一个挺实用的知识点
前端
theshy33 分钟前
前端自制接口抓取工具:一键收集并导出接口列表
前端
wayne21436 分钟前
跨平台开发框架全景分析:Flutter、RN、KMM 与腾讯 Kuikly 谁更值得选择?
前端
LuckySusu36 分钟前
【js篇】JavaScript 对象创建的 6 种方式:从基础到高级
前端·javascript
LuckySusu37 分钟前
【js篇】async/await 的五大核心优势:让异步代码像同步一样清晰
前端·javascript
艾雅法拉拉38 分钟前
JS知识点回顾(1)
前端·javascript·面试
LuckySusu43 分钟前
【js篇】Promise 解决了什么问题?—— 彻底告别“回调地狱”
前端·javascript
程序员海军1 小时前
如何让AI真正理解你的需求
前端·后端·aigc
passer9811 小时前
基于Vue的场景解决
前端·vue.js
用户458203153171 小时前
CSS过渡(Transition)详解:创建平滑状态变化
前端·css