推荐答案
Nest.js 的守卫(Guard)是一种用于在请求处理之前进行条件判断的机制。守卫的主要作用是决定是否允许某个请求继续执行。它通常用于实现权限验证、角色检查等场景。守卫可以应用于控制器级别、路由级别或全局级别。
守卫通过实现 CanActivate
接口来定义,该接口包含一个 canActivate
方法。该方法接收 ExecutionContext
对象作为参数,返回一个布尔值或一个 Promise<boolean>
。如果返回 true
,请求将继续执行;如果返回 false
,请求将被拒绝。
本题详细解读
守卫的作用
守卫的主要作用是在请求到达控制器之前进行条件判断。它可以用于多种场景,例如:
- 验证用户是否已登录
- 检查用户是否具有访问某个资源的权限
- 根据请求的某些属性(如 IP 地址)决定是否允许请求继续
守卫的实现
要实现一个守卫,首先需要创建一个类并实现 CanActivate
接口。CanActivate
接口要求实现 canActivate
方法,该方法接收 ExecutionContext
对象作为参数,并返回一个布尔值或一个 Promise<boolean>
。
-- -------------------- ---- ------- ------ - ----------- ------------ ---------------- - ---- ----------------- ------------- ------ ----- --------- ---------- ----------- - -------------------- ------------------ ------- - ---------------- - ----- ------- - ------------------------------------ -- --------- ------ ------------------------------ - ------- ------------------------ ----- ------- - -- --------- ------ ----- -- - ----- - -
守卫的应用
守卫可以通过装饰器 @UseGuards
应用到控制器或路由上。例如:
-- -------------------- ---- ------- ------ - ----------- ---- --------- - ---- ----------------- ------ - --------- - ---- --------------- ------------------- --------------------- ------ ----- -------------- - ------ ---------- ------ - ------ ----- ------ ------- --- ------ - -
全局守卫
守卫还可以通过 app.useGlobalGuards
方法应用到整个应用程序中:
-- -------------------- ---- ------- ------ - ----------- - ---- --------------- ------ - --------- - ---- --------------- ------ - --------- - ---- --------------- ----- -------- ----------- - ----- --- - ----- ------------------------------ ----------------------- ------------- ----- ----------------- - ------------
总结
守卫是 Nest.js 中用于在请求处理之前进行条件判断的机制。通过实现 CanActivate
接口,开发者可以自定义守卫的逻辑,并将其应用到控制器、路由或全局范围。守卫在权限验证、角色检查等场景中非常有用。