如何解决nestjs中的DI问题?

Posted

技术标签:

【中文标题】如何解决nestjs中的DI问题?【英文标题】:How to resolve DI issue in nest.js? 【发布时间】:2018-05-24 16:20:51 【问题描述】:

我想了解如何通过 DI 在 nestjs 中导入 3rd 方库。所以,我有一堂课AuthService

export class AuthService 
   constructor(
     @Inject(constants.JWT) private jsonWebToken: any,
   )
  ....

JWT 提供者:

import * as jwt from 'jsonwebtoken';
import Module from '@nestjs/common';
import constants from '../../../constants';

const jwtProvider = 
  provide: constants.JWT,
  useValue: jwt,
;

@Module(
  components: [jwtProvider],
)
export class JWTProvider 

库模块:

import  Module  from '@nestjs/common';
import BcryptProvider from './bcrypt/bcrypt.provider';
import JWTProvider from './jsonwebtoken/jwt.provider';

@Module(
  components: [
    BcryptProvider,
    JWTProvider,
  ],
  controllers: [],
  exports: [
    BcryptProvider,
    JWTProvider,
  ],
)
export class LibrariesModule

我收到此错误:

Error: Nest can't resolve dependencies of the AuthService (?). Please verify whether [0] argument is available in the current context.
    at Injector.<anonymous> (D:\Learning\nest\project\node_modules\@nestjs\core\injector\injector.js:156:23)
    at Generator.next (<anonymous>)
    at fulfilled (D:\Learning\nest\project\node_modules\@nestjs\core\injector\injector.js:4:58)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

此外,我想听听一些关于不要在 jsonWebToken 变量中使用类型 any 的建议。

【问题讨论】:

我挖得更深了,根据源代码中的cmets:“组件可以通过构造函数注入依赖项。这些依赖项应该属于同一个模块。”。问题是一样的,但是我如何注入外部组件? 【参考方案1】:

魔鬼在细节中。您可以像这样将其他模块“导入”到 AuthModule 中:

@Module(
  modules: [LibrariesModule], // <= added this line
  components: [AuthService, JwtStrategy],
  controllers: [],
)
export class AuthModule 


来源:here

第二个问题仍未解决。

【讨论】:

我需要单独提问还是保留这个?

以上是关于如何解决nestjs中的DI问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何使依赖注入适用于 NestJS 中的全局异常过滤器?

如何在 NestJS 中热重载联邦网关

NestJS跨域问题

如何解决在 NestJs 应用程序中应该是 Injectable 类的未实例化属性?

NestJS:解决 NestMiddleware 中的依赖关系?

如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm