Guard,可以翻译成守卫,守卫的作用就是决定要不要让请求通过, 就是让请求接触到路由处理器。守卫会在中间件之后,在拦截器还有管道之前被执行。
先在终端用命令给应用生成一个守卫,看看里面都有什么东西, nest generate 生成一个 guard,名字是 demoAuth,放在 core/guards 里面。
→ nest generate guard demoAuth core/guards
回到项目,找到刚才创建的 Guard。
守卫是一个类,这个类得用 @Injectable 装饰一下, 它还得实施 CanActivate 接口,这样就需要在类里面添加一个 canActivate 方法。
方法里面有个 context 参数,它是 ExecutionContext, 这个方法如果返回 ture 就会让请求通过,返回 false 的话就不允许请求通过。
方法也可以通过 Promise 或者 Observable 异步返回 true 或者 false。