一文入门【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机制都将是你不可或缺的工具。

相关推荐
kyriewen7 小时前
程序员连夜带团队跑路,省了23万:这AI太贵,真的用不起了
前端·javascript·openai
辞旧 lekkk8 小时前
【Qt】信号和槽
linux·开发语言·数据库·qt·学习·mysql·萌新
2zcode8 小时前
运动模糊图像复原的MATLAB仿真与优化
开发语言·matlab
袁雅倩19979 小时前
当吸尘器、筋膜枪都用上Type-C,供电方案该怎么选?浅谈PD取电芯片ECP5702的应用
c语言·开发语言·支持向量机·动态规划·推荐算法·最小二乘法·图搜索算法
Aaswk9 小时前
Java Lambda 表达式与流处理
java·开发语言·python
万邦科技Lafite10 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
我叫黑大帅10 小时前
为什么需要 @types/react?解决“无法找到模块 react 的声明文件”报错
前端·javascript·面试
之歆10 小时前
DAY_21JavaScript 深度解析:数组(Array)与函数(Function)(一)
前端·javascript
Cyber4K11 小时前
【Python专项】进阶语法-系统资源监控与数据采集(1)
开发语言·python·php
Le_ee11 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php