【问题标题】:Nest can't resolve dependencies of the UserRepository. When I change the class nameNest 无法解析 UserRepository 的依赖项。当我更改班级名称时
【发布时间】:2020-07-15 17:41:10
【问题描述】:

我在使用 Nestjs 时遇到了错误。此代码有效,但是当我将类名 (UserEntity) 更改为 User 时,这将失败。任何想法为什么会发生这种情况?

  • 这工作UserEntity

  • 它不起作用User

Nest can't resolve dependencies of the UserRepository (?, Sequelize). Please make sure that the argument UserRepository at index [0] is available in the UserModule context.
shield-v2_1        | 2020-07-15T17:38:40.259161456Z 
shield-v2_1        | 2020-07-15T17:38:40.259165312Z Potential solutions:
shield-v2_1        | 2020-07-15T17:38:40.259168488Z - If UserRepository is a provider, is it part of the current UserModule?
shield-v2_1        | 2020-07-15T17:38:40.259172757Z - If UserRepository is exported from a separate @Module, is that module imported within UserModule?
shield-v2_1        | 2020-07-15T17:38:40.259176733Z   @Module({
shield-v2_1        | 2020-07-15T17:38:40.259179703Z     imports: [ /* the Module containing UserRepository */ ]
shield-v2_1        | 2020-07-15T17:38:40.259182257Z   })
shield-v2_1        | 2020-07-15T17:38:40.259184650Z  +94ms
shield-v2_1        | 2020-07-15T17:38:40.259187564Z Error: Nest can't resolve dependencies of the UserRepository (?, Sequelize). Please make sure that the argument UserRepository at index [0] is available in the UserModule context.
shield-v2_1        | 2020-07-15T17:38:40.259190324Z 
shield-v2_1        | 2020-07-15T17:38:40.259192884Z Potential solutions:
shield-v2_1        | 2020-07-15T17:38:40.259195330Z - If UserRepository is a provider, is it part of the current UserModule?
shield-v2_1        | 2020-07-15T17:38:40.259197909Z - If UserRepository is exported from a separate @Module, is that module imported within UserModule?
shield-v2_1        | 2020-07-15T17:38:40.259200479Z   @Module({
shield-v2_1        | 2020-07-15T17:38:40.259202883Z     imports: [ /* the Module containing UserRepository */ ]
shield-v2_1        | 2020-07-15T17:38:40.259205366Z   })
shield-v2_1        | 2020-07-15T17:38:40.259207763Z 
shield-v2_1        | 2020-07-15T17:38:40.259210212Z     at Injector.lookupComponent (/app/node_modules/@nestjs/core/injector/injector.js:180:19)
shield-v2_1        | 2020-07-15T17:38:40.259213184Z     at Injector.resolveComponentInstance (/app/node_modules/@nestjs/core/injector/injector.js:148:44)
shield-v2_1        | 2020-07-15T17:38:40.259215943Z     at Injector.resolveSingleParam (/app/node_modules/@nestjs/core/injector/injector.js:137:21)
shield-v2_1        | 2020-07-15T17:38:40.259218639Z     at resolveParam (/app/node_modules/@nestjs/core/injector/injector.js:102:49)
shield-v2_1        | 2020-07-15T17:38:40.259221192Z     at Array.map (<anonymous>)
shield-v2_1        | 2020-07-15T17:38:40.259224130Z     at Injector.resolveConstructorParams (/app/node_modules/@nestjs/core/injector/injector.js:117:58)
shield-v2_1        | 2020-07-15T17:38:40.259226732Z     at Injector.loadInstance (/app/node_modules/@nestjs/core/injector/injector.js:81:20)
shield-v2_1        | 2020-07-15T17:38:40.259229282Z     at Injector.loadProvider (/app/node_modules/@nestjs/core/injector/injector.js:38:20)
shield-v2_1        | 2020-07-15T17:38:40.259231826Z     at Promise.all.wrappers.map.item (/app/node_modules/@nestjs/core/injector/instance-loader.js:43:62)
shield-v2_1        | 2020-07-15T17:38:40.259234478Z     at Array.map (<anonymous>)
shield-v2_1        | 2020-07-15T17:38:40.259236997Z     at InstanceLoader.createInstancesOfProviders (/app/node_modules/@nestjs/core/injector/instance-loader.js:43:36)
shield-v2_1        | 2020-07-15T17:38:40.259253968Z     at Promise.all.map (/app/node_modules/@nestjs/core/injector/instance-loader.js:28:24)
shield-v2_1        | 2020-07-15T17:38:40.259258268Z     at Array.map (<anonymous>)
shield-v2_1        | 2020-07-15T17:38:40.259260830Z     at InstanceLoader.createInstances (/app/node_modules/@nestjs/core/injector/instance-loader.js:27:49)
shield-v2_1        | 2020-07-15T17:38:40.259263419Z     at InstanceLoader.createInstancesOfDependencies (/app/node_modules/@nestjs/core/injector/instance-loader.js:17:20)
shield-v2_1        | 2020-07-15T17:38:40.259266074Z     at exceptions_zone_1.ExceptionsZone.asyncRun (/app/node_modules/@nestjs/core/nest-factory.js:82:38)
shield-v2_1        | 2020-07-15T17:38:40.259268658Z     at process._tickCallback (internal/process/next_tick.js:68:7)
shield-v2_1        | 2020-07-15T17:38:40.259271155Z     at Function.Module.runMain (internal/modules/cjs/loader.js:744:11)
shield-v2_1        | 2020-07-15T17:38:40.259273674Z     at startup (internal/bootstrap/node.js:285:19)
shield-v2_1        | 2020-07-15T17:38:40.259276140Z     at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)

/* user.ts */

import {Column, Model, Table} from 'sequelize-typescript';

@Table({tableName: 'users'})
export default class UserEntity extends Model<UserEntity> {
  @Column
  username: string;

  @Column
  email: string;

  @Column({field: 'full_name'})
  fullName: string;

  @Column({field: 'is_app_account'})
  isAppAccount: number;

  @Column({field: 'created_at'})
  createdAt: Date;

  @Column({field: 'updated_at'})
  updatedAt: Date;

  @Column({field: 'manager_id'})
  managerId: number;
}

// user.repository.ts
import {Injectable} from '@nestjs/common';
import {InjectModel} from '@nestjs/sequelize';
import {Sequelize} from 'sequelize-typescript';

import User from './user';
import BaseRepository from '../../common/base.repository';

@Injectable()
export default class UserRepository extends BaseRepository {
  constructor(
    @InjectModel(User)
    protected model: typeof User,
    protected sequelize: Sequelize,
  ) {
    super(model, sequelize);
  }
}

// user module index.ts
import {Module} from '@nestjs/common';
import {SequelizeModule} from '@nestjs/sequelize';

import InteractionModule from '../interactions';

import User from './user';

import UserRepository from './user.repository';

@Module({
  imports: [
    SequelizeModule.forFeature([User]),
    InteractionModule,
  ],
  controllers: [],
  providers: [UserRepository],
  exports: [UserRepository],
})
export default class UserModule {}

export {
  User,
};

// app.module
import {
  Module,
} from '@nestjs/common';
 
import {
  connectionToCoreDB,
  connectionToInteractionDB
} from './config/database/getConnectionOptions';

import AppController from './app.controller';

import {InteractionEntity} from './apis/interactions';
import UserModule, {User} from './apis/users';

@Module({
  imports: [
    connectionToCoreDB([
      User
    ]),
    connectionToInteractionDB([InteractionEntity]),
    UserModule,
    // ProjectModule,
  ],
  controllers: [AppController],
})
export class AppModule {

}


【问题讨论】:

  • 能否分享您的服务文件。我需要知道您是如何将存储库注入服务的。

标签: javascript typescript nestjs


【解决方案1】:

我相信这与ts-morph 以及 Nest 如何读取类名以正确获取和使用元数据有关。因为类名是真正的UserEntity,所以应该传递给@InjectModel。通常对于 Nest,使用命名导入比使用默认导入导致的问题更少。

【讨论】:

  • 我尝试将所有导入更改为不默认导出,但这不起作用
  • export class UserEntityimport { UserEntity } from '' 对吗?
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2021-01-28
  • 2021-11-24
  • 2019-01-21
相关资源
最近更新 更多