返回介绍

模块

发布于 2019-10-12 12:56:37 字数 5921 浏览 1467 评论 0 收藏 0

模块

Module is a class with @Module({}) decorator. This decorator provides metadata, which framework uses to organize application structure.

模块是一个带有@Module({})装饰器的类。该装饰器为框架提供组织应用程序结构的元数据。

Right now, it is our ApplicationModule:

现在,我们来准备ApplicationModule

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
    controllers: [ UsersController ],
    components: [ UsersService ],
})
export class ApplicationModule {}

By default, modules encapsulate each dependency. It means, that it is not possible to use its components / controllers outside module. Each module can also import another modules. In fact, you should think about Nest Modules as a tree of modules. Let's move UsersController and UsersService to UsersModule. Simply create new file e.g. users.module.ts with below content:

默认情况下,模块封装每一个依赖。也就是说,只能在模块内部使用模块的组件/控制器。 在每一个模块中都可以导入其他模块。实际上,你可以将Nest模块看作是一颗模块树。 将 UsersControllerUsersService 移动至UsersModule,只需要简单创建一个文件,例如users.module.ts。以下是文件内容:

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';

@Module({
    controllers: [ UsersController ],
    components: [ UsersService ],
})

export class UsersModule {} Then import UsersModule into ApplicationModule (our main application module):

import { Module } from '@nestjs/common';
import { UsersModule } from './users/users.module';

@Module({
    modules: [ UsersModule ]
})
export class ApplicationModule {}

It's everything. As might be seen, with Nest you can naturally split your code into separated and reusable modules!

接下来,你就可以使用Nest将你的代码拆分成一个个可重复使用的模块了。

分享实例

You already know that Module encapsulates its components. What if you want to share instance between two or more modules? With Nest - it is pretty easy. You only have to use@Shared() decorator and add exports array, just like that:

我们都知道每个模块封装它们的组件。那么要想在模块之间分享组件该怎么办呢?有了Nest,你只需要使用@Shared()装饰器并且添加输出数组,就可以轻松分享组件了。以下是一个示例:

import { Module, Shared } from '@nestjs/common';

@Shared()
@Module({
    controllers: [ UsersController ],
    components: [ UsersService ],
    exports: [ UsersService ],
})
export class UsersModule {}

That's all. It is especially powerful feature. You can read more about it in Advanced / SharedModule section.

这是一个很强大的功能。更多关于分享组件的信息请阅读Advanced / SharedModule章节。

依赖注入

Module can easily inject components, which belongs to itself:

每个模块可以轻松注入它自己的组件:

@Module({
    controllers: [ UsersController ],
    components: [ UsersService, ChatGateway ],
})
export class UsersModule implements NestModule {
    constructor(private usersService: UsersService) {}
}

Furthermore, components also can inject modules:

此外,组件也可以注入模块:

export class UsersController {
    constructor(private module: UsersModule) {}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文