一文入门【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

import { NewsService } from './news.service';
import { News } from './interfaces/news.interface';

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

@Controller('news')
export class NewsController {
	constructor(private  newsService: NewsService) {}
	.....
}

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

@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 中注册

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

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NestJS是一个基于TypeScript的开源Web框架,它在Express之上构建,提供了丰富的功能和模块化设计。如果你想要在NestJS应用中使用cookies进行用户身份验证或存储数据,你可以遵循这些步骤: 1. **安装依赖**: 首先,确保已经安装了`@nestjs/authentication`和`@nestjs/http`模块,它们包含了处理HTTP请求和身份验证的功能。如果还没有安装,可以通过`npm install @nestjs/authentication @nestjs/http`命令添加。 2. **创建服务**: 在`app.module.ts`或相关的模块中,引入`AuthGuard`或自定义的认证策略,并使用`useGlobalGuards`注册它: ```typescript import { Module, GlobalGuard } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; @Module({ providers: [AuthGuard], // ... }) export class AppModule implements GlobalGuard { canActivate(context: ExecutionContext) { // 自定义登录检查逻辑 return true; } } ``` 3. **设置cookie**: 在认证成功后,使用`Response`对象的`setCookie`方法来设置cookie: ```typescript import { Injectable, CanActivate, HttpStatus, HttpResponse } from '@nestjs/common'; import * as cookieParser from 'cookie-parser'; import * as jwt from 'jsonwebtoken'; @Injectable() export class JwtAuthGuard extends AuthGuard('jwt') { canActivate(context: ExecutionContext): boolean { // ...其他认证逻辑 const user = this.getUserFromToken(); // 获取用户信息 if (!user) { return false; } // 设置cookie const token = jwt.sign({ userId: user.id }, 'your-secret-key', { expiresIn: '1h' }); const response = context.switchToHttp().getResponse<HttpResponse>(); response.setCookie('jwt', token, { httpOnly: true, maxAge: 60 * 60 * 1000 }); return true; } } ``` 这里设置了名为`jwt`的cookie,值为JWT令牌,通常`httpOnly`属性会确保cookie不被JavaScript脚本访问,`maxAge`则设置了cookie的有效时间。 4. **验证cookie**: 在每个需要保护的路由或控制器前,使用`@UseGuards(JwtAuthGuard)`装饰器,NestJS会自动在每次请求头中查找`jwt` cookie并解码验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值