0

我正在尝试将 Mollie 付款集成到我的 NestJS 后端。

为了与 Mollie 建立联系,我必须使用他们的 MollieClient 函数。但是,当我尝试在服务中使用它时,出现错误:

Nest can't resolve dependencies of the NewUserService (UserService, MailService, ConfigService, JwtService, ?). Please make sure that the argument Object at index [4] is available in the NewUserModule context.

我很确定这意味着我必须向 NewUserModule 添加一个 Mollie 模块/服务,但我认为该包实际上并没有附带为 NestJS 制作的模块。因此,如果我尝试制作 Mollie 模块/服务或在另一个服务中使用 MollieClient,它会要求我提供它,而我没有提供任何东西。

总的来说,我对 NestJS 和后端开发还很陌生,所以我弄错了吗?或者安装包中是否添加了模块?如果没有模块,我应该做一个吗?这样的模块中究竟应该包含什么?有什么指南吗?

我意识到这可能是一系列相当模糊的问题,但我不太确定如何解决这个问题。

编辑:重写问题以进行澄清。

提前致谢!

4

1 回答 1

0

该消息意味着,Nest 现在不知道如何解析NewUserService. 我认为这类似于MollieService?

您需要添加MollieServiceProvider您的NewUserModule

@Module({
  imports: [...],
  controllers: [...],
  providers: [
    ...otherProviders,
    MollieService
  ]
})
export class NewUserModule {}

或者您可以创建一个单独的MollieModule并将其导入NewUserModule

@Module({
  providers: [ MollieService ],
  exports: [ MollieService ] // export MollieService, so that other modules can use it
})
export class MollieModule {}
@Module({
  imports: [MollieModule],
  controllers: [...],
  providers: [...] // no need to provide MollieService here, because it's imported from MollieModule
})
export class NewUserModule {}

当然,您还必须MollieService使用他们的 SDK 来实现。

建议阅读有关模块的文档。它们乍一看有点难以理解,但是一个强大的概念!

编辑: 我建议将 MollySDK 包装在服务中。这样,您就不会在应用程序的各个位置处理 molly,并防止将其 api 和类型泄漏到您的服务中。

@Injectable()
export class MollyService {
  private readonly mollyClient: WhateverType;

  constructor() {
    this.mollyClient = createMollieClient({ apiKey: 'test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM' });
  }

  createPayment() {
    this.mollieClient.payments.create({...});
  }
}

可以照常注入此服务。

但是,如果您真的想直接使用 molly-client,则必须使用自定义提供程序

@Module({
  providers: [{
    provides: 'MOLLY_CLIENT',
    useFactory: () => createMollieClient({ apiKey: 'test_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM' }) // you could also use useValue instead of useFactory
  }],
  exports: [ 'MOLLY_CLIENT' ]
})
export class MollieModule {}

然后像这样注入它NewUsersService

constructor(@Inject('MOLLY_CLIENT')private readonly mollyClient: WhateverType) {}
于 2021-08-20T10:17:59.913 回答