Sequelize.js Nestjs sequelize依赖项注入不工作

Sequelize.js Nestjs sequelize依赖项注入不工作,sequelize.js,nestjs,Sequelize.js,Nestjs,我正在将sequelize ORM与nestjs一起使用。我已经创建了一个新模型“contact”,我想在其中注入一个服务。当我这样做时,控制台中有一个错误。我想我明白为什么我不能,但我不能想出一个解决办法。为什么不可能做到这一点 谢谢 contact.entity.ts @ObjectType() @Table export class Contact extends Model<Contact> { constructor(private utilsService: Uti

我正在将sequelize ORM与nestjs一起使用。我已经创建了一个新模型“contact”,我想在其中注入一个服务。当我这样做时,控制台中有一个错误。我想我明白为什么我不能,但我不能想出一个解决办法。为什么不可能做到这一点

谢谢

contact.entity.ts

@ObjectType()
@Table
export class Contact extends Model<Contact> {

  constructor(private utilsService: UtilsServices) {
    super();
  }

  @Field(type => Int, { nullable: true })
  @PrimaryKey
  @AutoIncrement
  @Column
  id?: number;

  @Field({ nullable: true })
  @Column
  get firstName(): string {
    return this.utilsService.decrypt(this.getDataValue('firstName'));
  }

  set firstName(value) {
    const encryptValue = this.utilsService.encrypt(value);
    this.setDataValue('firstName', encryptValue);
  }

  @Field({ nullable: true })
  @Column
  get lastName(): string {
    return this.utilsService.decrypt(this.getDataValue('lastName'));
  }
import { Module } from '@nestjs/common';
import { UtilsModule } from '../utils/utils.module';
import { DatabaseModule } from '../database/database.module';
import { WinstonModule } from 'nest-winston';
import { contactsProviders } from './providers/contacts.providers';

@Module({
  imports: [
    UtilsModule,
    DatabaseModule,
    WinstonModule
  ],
  providers: [
    ...contactsProviders
  ]
})
export class ContactsModule {}
utils.service.ts

import { Inject, Injectable } from '@nestjs/common';
import { Logger } from 'winston';
import { ConfigService } from '@nestjs/config';
import * as CryptoJS from 'crypto-js';

@Injectable()
export class UtilsServices {

  constructor(@Inject('winston') private readonly logger: Logger,
              private readonly configService: ConfigService) {
  }

  /**
   * Encrypt data with a secret key store in env.
   * @param {string} data - A string to encrypt
   * @returns {Promise<string>} Encrypted data
   */
  encrypt(data): string {

    if (data === null || data === undefined || data === '') {
      return data;
    }
    const secretKey = this.configService.get('encrypt_secret');
    return CryptoJS.AES.encrypt(data, secretKey).toString();
  }

  /**
   * Decrypt data with a secret key store in env
   * @param {string} data - A string to encrypt
   * @returns {Promise<string>} Decrypted data
   */
  decrypt(data): string {
    if (data === null || data === undefined || data === '') {
      return data;
    }
    const secretKey = this.configService.get('encrypt_secret');
    const bytes = CryptoJS.AES.decrypt(data, secretKey);
    return bytes.toString(CryptoJS.enc.Utf8);
  }
}

从'@nestjs/common'导入{Inject,Injectable};
从“winston”导入{Logger};
从'@nestjs/config'导入{ConfigService};
从“crypto js”导入*作为CryptoJS;
@可注射()
导出类UtilsServices{
构造函数(@Inject('winston')专用只读记录器:记录器,
专用只读配置服务:配置服务){
}
/**
*使用env中的密钥存储对数据进行加密。
*@param{string}data-要加密的字符串
*@返回{Promise}加密数据
*/
加密(数据):字符串{
如果(数据===null | |数据===未定义| |数据====''){
返回数据;
}
const secretKey=this.configService.get('encrypt_secret');
返回CryptoJS.AES.encrypt(data,secretKey.toString();
}
/**
*使用env中的密钥存储解密数据
*@param{string}data-要加密的字符串
*@returns{Promise}已解密的数据
*/
解密(数据):字符串{
如果(数据===null | |数据===未定义| |数据====''){
返回数据;
}
const secretKey=this.configService.get('encrypt_secret');
const bytes=CryptoJS.AES.decrypt(数据,secretKey);
返回bytes.toString(CryptoJS.enc.Utf8);
}
}
我的错误消息:


src/database/database.providers.ts:41:9 - error TS2769: No overload matches this call.
  The last overload gave the following error.
    Type 'typeof Contact' is not assignable to type 'string | ModelCtor<Model<any, any>>'.
      Type 'typeof Contact' is not assignable to type 'ModelCtor<Model<any, any>>'.
        Type 'typeof Contact' is not assignable to type 'new () => Model<any, any>'.

41         Contact,
           ~~~~~~~

  node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.d.ts:16:5
    16     addModels(arg: Array<ModelCtor | string>): any;
           ~~~~~~~~~
    The last overload is declared here.



src/database/database.providers.ts:41:9-错误TS2769:没有与此调用匹配的重载。
上一次重载导致以下错误。
类型“typeof Contact”不可分配给类型“string | ModelCtor”。
类型“typeof Contact”不可分配给类型“ModelCtor”。
类型“typeof Contact”不可分配给类型“new()=>Model”。
41联系方式,
~~~~~~~
node_modules/sequelize typescript/dist/sequelize/sequelize/sequelize.d.ts:16:5
16 addModels(arg:Array):任意;
~~~~~~~~~
最后一个重载在这里声明。

您可以添加您的模块和服务类吗?是的,我已经更新了我的帖子,如果您需要更多信息,只需问:)您找到解决方案了吗?不,我认为这是由于sequelize的概念造成的问题。