十二、全局模块
当希望提供一组应该在所有地方开箱即用的提供者,可以使用@Global()装饰器将模块设置为全局的
1 | () |
上节模块导入的时候,我们留下了一些问题,今天我们来处理一部分,完成模块的重新导出功能
前边我们说了Controller和Provider,都是在appModule直接引入的,这就是我们的根模块,是构建应用图的起点。我们还会有其他的各种模块,每个模块封装了一组密切相关的功能。
@Module装饰器接收一个对象,对象的属性描述了模块:
providers - 由Nest注入容器实例化的提供者,可以在当前模块内共享controllers - 此模块定义的一组控制器imports - 导入的模块列表,被导入的模块中导出当前模块中所需要的providersexports - 导出的providers, 是当前模块的providers的子集,可以在其他导入当前模块的模块中使用(也可以重新导出导入的模块,这种情况下就不是providers的子集了)关于providers和controllers,我们前边已经讲过了,而imports和exports就是与模块相关的内容了。
本章节我们关注模块的导入,也就是imports的内容
之前我们写完了controller,然后补充了一些扩展知识,接下来我们继续完成provider的功能,主要是service服务
然后我们要实现Provider的注入
本节我们介绍下一些术语,了解我们后续要开发的内容
emitDecoratorMetadata是一个tsconfig的配置项,它是nestjs实现IOC容器和依赖注入的核心。
我们已经学过了很多nestjs的内置装饰器,现在我们看一下自定义的参数装饰器
这一节一起说一下@Redirect, @HttpCode, @Header这三个装饰器,这都是方法装饰器,用来装饰路由处理程序
在上一节,我们已经成功启动了服务,现在我们要来封装一些常用的参数装饰器。
们主要实现几个参数装饰器,获取常用的一些信息,如Request, Query, Headers, Param等
关于我们要封装的参数装饰器的用法,这里不会赘述,更多的关注其实现,如果不清楚用法请先自行查看官方文档。后续的封装也保持这个思路。