【Nest教程】自定义拦截器处理处理响应数据

本文介绍了如何在NestJS中创建和使用自定义拦截器来处理响应数据。通过创建transform.interceptor.ts文件并实现NestInterceptor接口,拦截器可以在函数执行前后添加额外逻辑,转换返回结果。在main.ts中绑定拦截器后,启动项目并使用Postman进行GET请求,可以看到响应数据已被自定义对象包裹。
摘要由CSDN通过智能技术生成

拦截器(Interceptors)是一个使用 @Injectable() 装饰的类,它必须实现 NestInterceptor 接口。

前面讲了基于Nest生成Web API项目,如果不清楚请移步:【Nest教程】基于Nest初始化Web API项目,文章只讲解了使用脚手架搭建简单的项目并且可以正常运行。

今天我们讲下自定义拦截器,Nest拦截器功能很强大,可以在函数执行之前/之后绑定额外的逻辑、转换从函数返回的结果、转换从函数抛出的异常、扩展基本函数行为等。我们在之前的项目基础上增加自定义拦截器,转换从函数返回的结果。

1 创建自定义拦截器

我们在我们项目目录src下新建interceptor文件夹,文件夹下新建transform.interceptor.ts文件,文件内容如下:

import {
    Injectable,
    NestInterceptor,
    CallHandler,
    ExecutionContext,
  } from '@nestjs/common';
  import { map } from 'rxjs/operators';
  import { Observable } from 'rxjs';
  interface Response<T> {
    data: T;
  }
  @Injectable()
  export class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NestJS 中的自定义守卫和自定义本地策略都是用于保护路由的工具,但它们的工作方式略有不同。 自定义守卫是一个类,它实现 `CanActivate` 接口并包含一个名为 `canActivate` 的方法。在 `canActivate` 方法中,您可以编写逻辑来检查用户是否可以访问该路由。如果 `canActivate` 方法返回 `true`,则表示用户可以访问该路由。如果方法返回 `false` 或抛出异常,则表示用户无法访问该路由。 以下是一个示例自定义守卫: ```typescript import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; @Injectable() export class MyGuard implements CanActivate { canActivate(context: ExecutionContext) { const request = context.switchToHttp().getRequest(); return request.user && request.user.role === 'admin'; } } ``` 在上面的代码中,我们定义了一个名为 `MyGuard` 的自定义守卫。在 `canActivate` 方法中,我们检查请求对象中的用户对象是否存在,并且用户具有 `admin` 角色。如果这些条件都为真,则返回 `true`,表示用户可以访问该路由。否则,返回 `false`。 自定义本地策略是一个类,它实现 `PassportStrategy` 接口并包含一个名为 `validate` 的方法。在 `validate` 方法中,您可以编写逻辑来验证用户凭据并返回用户对象。如果用户凭据有效,则返回用户对象。如果凭据无效,则抛出异常。 以下是一个示例自定义本地策略: ```typescript import { Injectable } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { Strategy } from 'passport-local'; import { AuthService } from './auth.service'; @Injectable() export class MyStrategy extends PassportStrategy(Strategy) { constructor(private readonly authService: AuthService) { super(); } async validate(username: string, password: string) { const user = await this.authService.validateUser(username, password); if (!user) { throw new UnauthorizedException(); } return user; } } ``` 在上面的代码中,我们定义了一个名为 `MyStrategy` 的自定义本地策略。在 `validate` 方法中,我们调用 `AuthService` 中的 `validateUser` 方法来验证用户凭据。如果凭据有效,则返回用户对象。否则,抛出 `UnauthorizedException` 异常。 总的来说,自定义守卫和自定义本地策略都是用于保护路由的工具。自定义守卫用于检查请求对象中的信息,以确定用户是否可以访问该路由。自定义本地策略用于验证用户凭据,并返回用户对象。您可以根据您的需求选择使用其中的一个或两个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值