Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nestjs模块 #34

Open
Vibing opened this issue May 6, 2021 · 0 comments
Open

nestjs模块 #34

Vibing opened this issue May 6, 2021 · 0 comments

Comments

@Vibing
Copy link
Owner

Vibing commented May 6, 2021

要想使用 nest 开发,你必须了解 module ,否则无法下手,也搞不懂模块间的引用逻辑。

如果你不懂 nest 里的模块,可以这样理解:它类似组件化概念里的组件,比如在写 React 时,我们有一个根组件,一个 React 应用由多个组件构成的; 在 nest 应用中,也有一个根模块( app.module, 即上图中的 Application Module ),整个 nest 应用由多个模块和一个根模块构成;

来看一个模块:

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  imports: [],
  controllers: [CatsController],
  providers: [CatsService],
  exports: []
})
export class CatsModule {}

仔细看,当一个类被 @module 装饰时,那么这个类就是一个模块类。@module 参数中有 imports、controllers、providers、exports 四个参数,这几个参数的内容,就是该模块的所有。比如 CatsController 和 CatsService 属于同一个应用程序域,那么就应该把它们都归属到一个模块下。

  • imports: 引入的模块,当前模块需要使用其他模块的功能,就需要在这里将其他模块引进来
  • constrollers: 当前模块中的控制器
  • providers: 提供者就是为当前模块提供的功能,一般是 Service 或被 @Injectable() 装饰的类,这些类可以通过 constructor 注入依赖关系,只有 provider 可以在模块中被共享
  • exports: 向外部导出 providers 里的提供者(子集),否则即使外部模块引入了当前模块也无法使用providers里的功能

总结一下,一个完整的 Module 由 imports, controllers, providers, exports 构成,模块可以引入其他模块,从而使用跟多功能,也可以导出当前模块的提供者,为其他模块提供服务

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant