一文入门【NestJs】Providers

Nest学习系列

✈️一文入门【NestJS】
✈️一文入门【NestJs】Controllers 控制器

🚩 前言

在NestJS的世界里,理解"Providers"是构建健壮、可维护的后端服务的关键。NestJS,作为Node.js的一个现代框架,采用了Angular的一些核心概念,如依赖注入(Dependency Injection,DI),并将其应用于服务器端开发。本文将深入探讨NestJS中的Providers机制,解析其工作原理,以及如何利用它们来优化你的应用程序。

🚩什么是 Providers

在NestJS中,Provider是任何可以被DI容器管理和注入的对象。它可以是一个类、一个值、一个工厂函数或是抽象接口。Providers的主要作用是提供服务、值或工厂,这些可以被其他模块或组件所共享和复用。

在上片文章中了解到了Nest的Controller,这篇文章介绍到另外一个重要的知识点providers;provider可以理解成为Controller提供服务的部分,也可以称为service

🚩如何创建一个 service

nest g service news

这是一个简单的service,目前具有两个功能一个是返回所有的新闻列表,一个是创建一条数据

🚩service如何为controller提供服务

依赖注入

第一步:在controller 种引入对应 service,以及对应的接口类型

news.controller.ts

javascript 复制代码
import { NewsService } from './news.service';
import { News } from './interfaces/news.interface';

第二步:通过constructor(private newsService: NewsService) {}注入

javascript 复制代码
@Controller('news')
export class NewsController {
	constructor(private  newsService: NewsService) {}
	.....
}

第三步:在对应的请求装饰器中使用

javascript 复制代码
@Controller('news')
export class NewsController {
	constructor(private  newsService: NewsService) {}
 	@Get('/page')
	async getNewsPageList(@Query() query: string): Promise<News[]> {
        console.log(query);
        return this.newsService.getNewsPageList();
    }

   @Post('/create')
   async  createNews(@Body() createNewsDto: CreateNewsDto) {
        console.log(createNewsDto,'添加参数');
        return this.newsService.createNews(createNewsDto);
    }
}

第四步:在app.module 中注册

javascript 复制代码
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NewsController } from './news/news.controller';
import { NewsService } from './news/news.service';

@Module({
  imports: [],
  controllers: [AppController, NewsController],
  providers: [AppService,NewsService],
})
export class AppModule {}

结语

掌握NestJS中的Providers,意味着你能够更好地构建模块化、可扩展的后端服务。通过合理的使用Providers,你可以轻松地管理依赖关系,提高代码的可读性和可维护性。无论是构建复杂的微服务架构,还是简单的API服务,NestJS的DI机制都将是你不可或缺的工具。

相关推荐
2的n次方_2 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
大模型玩家七七2 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
2501_944711433 小时前
JS 对象遍历全解析
开发语言·前端·javascript
凡人叶枫3 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
Tony Bai3 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
发现一只大呆瓜3 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
小糯米6013 小时前
C++顺序表和vector
开发语言·c++·算法
froginwe114 小时前
JavaScript 函数调用
开发语言
阔皮大师4 小时前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙4 小时前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js