Nestjs 导入服务或整个模块
Nestjs import service or the whole module
我是 Nestjs 的新手,如果我想在另一个模块中注入,我不明白什么时候需要导入整个模块或只导入服务。
例如:
我有我的 loggingModule
import { Module } from "@nestjs/common";
import { LoggingService } from "./logging.service";
@Module({
providers: [LoggingService],
exports: [LoggingService],
})
export class LoggingModule {}
使用我的登录服务:
import { Injectable } from "@nestjs/common";
@Injectable()
export class LoggingService {
logToConsole(logString: string) {
console.log(logString)
}
}
我想将它导入另一个模块,比如 BookModule
import { Module } from "@nestjs/common";
import { LoggingModule } from "src/logging/logging.module";
import { BookController } from "./book.controller";
import { BooksService } from "./books.service";
@Module({
controllers: [BookController],
providers: [BooksService],
imports: [LoggingModule]
})
export class BooksModule {
}
在我的控制器中我可以做:
@Controller('books')
export class BookController {
constructor(private booksService: BooksService, private loggingService: LoggingService) {}
问题是:
当我需要导入整个模块而不是提供商中的单个服务 (LogginService) 时,例如:
@Module({
controllers: [BookController],
providers: [BooksService,LoggingService],
})
export class BooksModule {
99% 的时间,导入模块。在 Nest 中,如果你导入模块,你会得到与已经创建的 class 相同的实例。如果将 provider
添加到 providers
数组,您最终会得到一个新实例,这不是很多人通常想要的。只要模块导出提供程序,您就会 re-use 创建的实例,这意味着更少的内存使用,更少的 class 实例数量泄漏,这意味着更少的时间来追踪为什么 this.someClass.field
不等于 this.someClass.field
我是 Nestjs 的新手,如果我想在另一个模块中注入,我不明白什么时候需要导入整个模块或只导入服务。
例如: 我有我的 loggingModule
import { Module } from "@nestjs/common";
import { LoggingService } from "./logging.service";
@Module({
providers: [LoggingService],
exports: [LoggingService],
})
export class LoggingModule {}
使用我的登录服务:
import { Injectable } from "@nestjs/common";
@Injectable()
export class LoggingService {
logToConsole(logString: string) {
console.log(logString)
}
}
我想将它导入另一个模块,比如 BookModule
import { Module } from "@nestjs/common";
import { LoggingModule } from "src/logging/logging.module";
import { BookController } from "./book.controller";
import { BooksService } from "./books.service";
@Module({
controllers: [BookController],
providers: [BooksService],
imports: [LoggingModule]
})
export class BooksModule {
}
在我的控制器中我可以做:
@Controller('books')
export class BookController {
constructor(private booksService: BooksService, private loggingService: LoggingService) {}
问题是: 当我需要导入整个模块而不是提供商中的单个服务 (LogginService) 时,例如:
@Module({
controllers: [BookController],
providers: [BooksService,LoggingService],
})
export class BooksModule {
99% 的时间,导入模块。在 Nest 中,如果你导入模块,你会得到与已经创建的 class 相同的实例。如果将 provider
添加到 providers
数组,您最终会得到一个新实例,这不是很多人通常想要的。只要模块导出提供程序,您就会 re-use 创建的实例,这意味着更少的内存使用,更少的 class 实例数量泄漏,这意味着更少的时间来追踪为什么 this.someClass.field
不等于 this.someClass.field