nestjs 全栈进阶--装饰器

82 阅读2分钟
视频教程

18_nest中的装饰器1_哔哩哔哩_bilibili

nest new nest-decorator -p pnpm
pnpm start:dev

1. @Module声明模块

用于定义模块结构和模块之间的依赖关系

2. @Controller声明 controller

用于定义一个控制器类,指定控制器处理的路由前缀

3. @Injectable 声明 provider

表明它们是依赖注入容器的一部分

这个 provider 可以是任何的 class,我们随便新建一个ts文件来测试下:

我们在app.module 去引用下,在注入它:

前面我们讲过,属性注入要指定注入的 token,可能是 class 也可能是 string,你还可以通过 useFactory、useValue 等方式声明 provider,这里不再演示

4. @Optional

@Optional()装饰器用于在依赖注入过程中标识一个注入的依赖项是可以选填的。这意味着即使没有找到该依赖项,Nest.js也不会抛出错误,而是会返回undefined。

我们先删掉刚刚在app.module的引用

再加个Optional

我们保存时候,你会发现,这个是不会报错的,当然,如果你在浏览器中访问,他会报错,因为我们无法从undefined中获得getHello这个方法

5. @Get, @Post, @Put, @Delete, @Patch,@Options、@Headers, @Param, @Query, @Body, @Request, @Response , @Next

这些在参数获取时,我们也讲过了

6. @Global

如果模块被很多地方都引用,为了方便,可以用 @Global 把它声明为全局的,这样它 exports 的 provider 就可以直接注入了。(前面讲过,不再赘述)

7. @Catch,@UseFilters,@UseGuards,@UseInterceptors,@UsePipes,

在上节课的aop切面编程中我们已经讲过了,大家可以回去看看

8. @SetMetadata

@SetMetadata()装饰器是用来设置元数据的,这些元数据可以被后续的反射API或者其他机制读取并用于定制应用程序的行为。元数据是一种附加到类、方法、属性或参数上的额外信息,它们不会直接影响代码执行,但在某些情况下可以提供有用的信息。

然后在 guard 或者 interceptor 里取出来

nest g guard aaa --no-spec --flat

9. @Ip

获取请求的ip

10. @Session

获取 session 对象 需要安装一个 express 中间件

pnpm install express-session
pnpm install @types/express-session -D

11. @HostParam

controller 除了可以指定某些 path 生效外,还可以指定 host:

host 里的参数就可以通过 @HostParam 取出来

你会发现只有 host 满足 xxx.0.0.1 的时候才会路由到这个 controller。

12. @Redirect

指定路由重定向的 url

13. @Render

指定渲染用的模版引擎

pnpm install hbs

修改如下