使用@Module NestJS的优点

问题描述 投票:0回答:2

我正在制作一个新的 NestJS 应用程序,在第一个应用程序中出现了很多错误,因为我创建的多个模块没有正确的

imports
providers
exports
TypeOrmModule.forFeature
等让我想知道:重点是什么?

为什么不只使用

app.module
并把所有东西都倒进去呢?所有控制器、服务、实体类型以及任何其他可能出现的内容?

来自文档:

我们想强调的是,强烈推荐模块作为 组织组件的有效方法

这是唯一的原因吗?组织? 依赖注入是否发挥了某种作用?

编辑:

如果组织是主要原因,为什么不将控制器和服务放在不同的文件夹中?基本上是一个没有导入、提供程序等的模块。用更少的样板来做同样的事情。

nestjs
2个回答
3
投票

为什么不只使用 app.module 并转储其中的所有内容?

更好的是,为什么要使用多个文件呢?为什么不只写几千行

index.js
,没有类型,没有组织,只有原始 JS 呢?

答案是?代码组织和易于重用。通过制作这些模块,您应该将相似的逻辑组合在一起。单个功能的所有代码应该只需导入

FeatureModule
即可使用并且可用。当谈到库模块时,这一点变得非常明显:
TypeOrmModule
有一个
forRoot/forRootAsync
和一个
forFeature
,它公开了将存储库注入到您的服务中的方法。
JwtModule
有一个
register/registerAsync
并公开一个
JwtService
,因此您可以配置
JwtService
一次并重新使用提供程序。

在处理实体功能时,这可能看起来更混乱,但从技术上讲,这一切仍然是可能的,因此理论上,您可以从应用程序 A 中获取

FeatureModule
并将其放入应用程序 B 中,并且与应用程序 B 相关的所有内容仍然有效
FeatureModule
,类似于 pulumi 具有堆栈和应用程序的想法,您可以使用同一组组件启动新应用程序。

模块系统,在我看来,一旦掌握了它的窍门,就可以很容易地识别所有模块将使用什么,以及其他功能以及它们如何连接。这只是一个纪律和学习框架功能的问题。


0
投票

NestJS 中的模块受到 Angular 的启发。 而 Angular 由于延迟加载而添加了模块系统:模块:何时以及为何?。这是有道理的,SPA 应用程序因笨重而臭名昭著。

此时,我们需要问一个问题。 NestJS需要延迟加载吗?

答案是否定的。后端应用程序不存在延迟加载之类的东西。也许在世界上,我们可以找到一些后端需要延迟加载的情况,但我什么也想不起来。

是的,你可以将所有内容放入AppModule中。真的。完全不需要多个模块。

而且是的,你是对的,按文件夹组织代码就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.