nest Providers服务创建、使用

博客围绕 Nest.js 的 Providers 展开,介绍了控制器将复杂任务委托给 Providers,创建如 CatsService 这样的服务,通过构造函数注入使用服务,并将其在根模块注册,还进行了接口测试,最后提到服务作用域,应用关闭时 provider 会被销毁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Providers

  1. 控制器应处理 HTTP 请求并将更复杂的任务委托给 providers
  2. Provider 只是一个用 @Injectable() 装饰器注释的类
  3. 许多基本的 Nest 类都可能被视为 provider - service, repository, factory, helper 等,他们都可以通过 constructor 注入依赖关系

创建服务

  1. CatsService 是具有一个属性和两个方法的基本类。唯一的新特点是它使用 @Injectable() 装饰器
  2. 该服务将负责数据存储和检索,其由 CatsController(控制器)使用
    该 @Injectable() 附加有元数据,因此 Nest 知道这个类是一个 Nest provider
    cats.service.ts
import { Injectable } from '@nestjs/common';

// 定义数据类型
export class Cat {
  name: string;
  age: number;
  breed: string;
}

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}

使用服务

CatsService 是通过类构造函数注入的。注意这里使用了私有的只读语法。这意味着我们已经创建并初始化了 catsService 成员
cats.controller.ts

import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';

// 定义数据类型
export class Cat {
  name: string;
  age: number;
  breed: string;
}
//接口路由为cats
@Controller('cats')
export class CatsController {
  // 将服务(CatsService)注入到控制器(CatsController)
  constructor(private catsService: CatsService) {}

  @Post()//post请求 新增数据
  async create(@Body() createCat: Cat) {
    // 使用catsService的create方法
    this.catsService.create(createCat);
  }

  @Get()//get请求 获取数据
  async findAll(): Promise<Cat[]> {
    // 使用catsService的findAll方法
    return this.catsService.findAll();
  }
}

将服务在根模块中注册

app.module.ts

import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller'
import { CatsService } from './cats/cats.service'

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class AppModule { }

接口测试

测试效果
【获取】第一次获取数据返回一个空的列表[]在这里插入图片描述
【插入】进行一次插入操作在这里插入图片描述
【获取】再次获取列表可以看到接口返回了一条数据在这里插入图片描述
【插入】第二次进行插入操作在这里插入图片描述
【获取】再获取列表可以看到变成了两条数据在这里插入图片描述

作用域

下面截图中,服务重启后重新获取列表,可以看到之前插入的数据已经不见了
因为当应用程序关闭时,每个 provider 都将被销毁
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来一颗砂糖橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值