nodejs企业级开发框架nest学习总结 - 3.NestJS入门guard、interceptor、customDecorator、循环引用、注入作用域、生命钩子等

本文是NestJS企业级开发系列的第三篇,详细介绍了NestJS中的守卫(guard)、拦截器(interceptor)、自定义装饰器(customDecorator)的使用,以及如何解决循环引用问题和理解注入作用域。同时,还探讨了生命钩子(lifecycle events)在NestJS中的应用。
摘要由CSDN通过智能技术生成

NestJS入门guard、interceptor、customDecorator、循环引用、注入作用域、生命钩子等

官方API地址(点击跳转)
点击跳转到个人的博客(前面两节)
1.guard-守卫(每个中间件之后执行,但在任何拦截器或管道之前执行。)
1.1简单例子,守卫需要实现CanActivate接口
// guard/auth.guard.ts
@Injectable() // 守卫必须要Injectable装饰器修饰
export class AuthGuard implements CanActivate {
   
    public canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> {
   
        /**
         * ExecutionContext : 继承ArgumentsHost接口,拥有着和过滤器一样的属性,并且多以下两个属性
         * getClass()返回一个(控制器)类型(不是实例)。
         * getHandler()将返回对服务的方法的引用
         */
        const request: Request = context.switchToHttp().getRequest();
        return true; //当返回false的时候,守卫不通过,直接抛出异常
    }
}
1.2守卫的使用,使用UseGuards装饰器,可以是控制器作用域,方法作用域或全局作用域。
控制器作用域
import {
    Controller, UseGuards } from '@nestjs/common';
import {
    AuthGuard } from './guard/auth.guard'; // 使用守卫
@Controller('/app')
@UseGuards(new AuthGuard()) 
export class AppController {
    }
类的方法作用域
import {
    Controller, UseGuards, Get } from '@nestjs/common';
import {
    AuthGuard } from './guard/auth.guard'; // 使用守卫
@Controller('/app')
export class AppController {
   
	@UseGuards(new AuthGuard()) 
	@Get()
	public getHello(): string {
   
		return 'hello';
	}
}
全局作用域
import {
    NestFactory } from '@nestjs/core';
import {
    AuthGuard } from './guard/auth.guard'; // 使用守卫
function async bootstrap(){
   
	const app = await NestFactory.create(AppModule);
	app.useGlobalGuards(new AuthGuard()); 
	await app.listen(3000);
}
bootstrap();
模块作用域
import {
    Module } from '@nestjs/common';
import {
    APP_GUARD } from '@nestjs/core';
import {
    AuthGuard } from './guard/auth.guard'; // 使用守卫
@Module({
   
	providers:[
	 	{
   
           provide: APP_GUARD, // APP_GUARD是一个常量,也可以自定义
           useClass: AuthGuard,
        },
	]
})
export class ChildModule{
    }
1.3(假设)权限管理,使用守卫
// guard/roles.guard.ts
import {
    Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import {
    Reflector } from 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值