【问题标题】:NestJS. Custom provider, inject can't resolve dependencies of the useFactory巢穴。自定义提供程序,注入无法解析 useFactory 的依赖关系
【发布时间】:2018-11-08 05:32:15
【问题描述】:

我在应用启动期间收到以下错误: Error: Nest can't resolve dependencies of the useFactory (?). Please verify whether [0] argument is available in the current context.

ConfigService 被导出,ConfigModule 作为第一个模块加载。不知道是我的错还是 NestJS 的错误。 也许有人能找到一些东西)谢谢。

database.providers.ts:

import { Sequelize } from 'sequelize-typescript';
import { SEQUELIZE_TOKEN } from './constants';
import { User } from '../users/user.entity';
import { ConfigService } from '../config/config.service';

export const databaseProviders = [
 {
  provide: SEQUELIZE_TOKEN,
  useFactory: async (configService: ConfigService) => {
    const sequelize = new Sequelize({
      dialect: 'mysql',
      host: 'localhost',
      port: 3306,
      username: configService.databaseUser,
      password: configService.databasePassword,
      database: configService.databaseName,
      operatorsAliases: false,
      logging: false,
    });
    sequelize.addModels([User]);
    await sequelize.sync({ force: process.env.NODE_ENV === 'local'
    || process.env.NODE_ENV === 'test',
    });
    return sequelize;
  },
  inject: [ConfigService],
 },
];

部分app.module.ts:

@Module({
 imports: [
  ConfigModule,
  DatabaseModule,
  GraphQLModule,
  UsersModule,
 ],
 exports: [DatabaseModule],
})

部分config.module.ts:

@Module({
 providers: [
    {
        provide: ConfigService,
        useValue: new ConfigService(`./config`),
    },
 ],
 exports: [ConfigService],
})

【问题讨论】:

    标签: typescript nestjs


    【解决方案1】:

    您必须在您的DatabaseModule 中导入ConfigModule。 Nest 中的提供程序默认情况下不是全局范围的。

    【讨论】:

    • 谢谢,完美运行。也许将有关提供程序范围的信息添加到官方文档(自定义提供程序部分)?
    • 是的,有许多自定义装饰器技术可供遵循。在 2021 年阅读此内容:)。
    猜你喜欢
    • 2020-11-25
    • 2016-04-23
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多