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