视频教程
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
修改如下