Nest.js 面试题
目录

Nest.js 中如何在路由级别应用守卫?

· 约 4 分钟读完 · 第 80 / 144 章

推荐答案

在 Nest.js 中,可以通过在控制器或路由处理程序上使用 @UseGuards() 装饰器来应用守卫。守卫可以用于路由级别,以控制请求是否应该被处理。

在这个例子中,AuthGuard 被应用到了 getProtectedResource 路由上,只有通过守卫的请求才能访问该路由。

本题详细解读

守卫的作用

守卫(Guards)是 Nest.js 中的一种特殊组件,主要用于在请求到达路由处理程序之前执行一些逻辑。守卫通常用于身份验证和授权,确保只有符合条件的请求才能继续处理。

路由级别应用守卫

在 Nest.js 中,守卫可以应用在控制器级别或路由级别。通过在路由处理程序上使用 @UseGuards() 装饰器,可以将守卫应用到特定的路由上。

1. 创建守卫

首先,你需要创建一个守卫类。守卫类需要实现 CanActivate 接口,并实现 canActivate 方法。该方法返回一个布尔值或一个 Promise<boolean>,表示请求是否应该被允许继续。

2. 应用守卫

在控制器或路由处理程序上使用 @UseGuards() 装饰器来应用守卫。

在这个例子中,AuthGuard 被应用到了 getProtectedResource 路由上。只有当 canActivate 方法返回 true 时,请求才会被允许继续处理。

全局守卫

如果你希望将守卫应用到所有路由,可以在模块级别使用 APP_GUARD 提供者。

这样,AuthGuard 将会应用到所有的路由上。