Express NestJS UnhandledPromisejectionWarning:TypeError:this.client.send不是函数

Express NestJS UnhandledPromisejectionWarning:TypeError:this.client.send不是函数,express,rabbitmq,nestjs,Express,Rabbitmq,Nestjs,我正在构建一个使用express的nestJS api,并尝试连接到rabbitMQ,每项都达到了99%,在实现了所有必要的代码之后,我遇到了最后一个问题 import { Injectable } from '@nestjs/common'; import { responseCodes } from 'src/common/helpers/responses/responses.helper'; import { towelModule} from './towel.module'; imp

我正在构建一个使用express的nestJS api,并尝试连接到rabbitMQ,每项都达到了99%,在实现了所有必要的代码之后,我遇到了最后一个问题

import { Injectable } from '@nestjs/common';
import { responseCodes } from 'src/common/helpers/responses/responses.helper';
import { towelModule} from './towel.module';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { ClientProxy } from '@nestjs/microservices';
import { RabbitMQModule } from './rabbit-mq.module';
import { Inject } from '@nestjs/common';
@Injectable()
export class towelService {
  constructor( @Inject('RabbitMQModule') private readonly client: ClientProxy,) {}

  async run(data: any): Promise<any> {
    return new Promise(async (resolve, reject) => {
      const response = true;
      let pattern;
      

          this.client.send(pattern, data);
          data['users'] = 'new';
          resolve(data);
    
    });
  }
}

但我从来没有在兔子队看到过任何东西。但是函数现在正在执行

您应该使用
@Inject('rabbitmq-module')
而不是
@Inject('RabbitMqModule')
,并且您的
RabbitMqModule
应该具有
导出:[ClientsModule]
而不是
导出:[RabbitMqModule]
。所发生的事情是,Nest看到的是注入令牌
RabbtMqModule
,它与
RabbitMqModule
类的名称匹配,因此正在注入模块类,而不是客户端代理

从'@nestjs/common'导入{Module};
从'@nestjs/microservices'导入{ClientsModule,Transport};
从“./tower.controller”导入{towercontroller};
从“/tower.service”导入{towerservice};
@模块({
进口:[
ClientsModule.register([
{
名称:“兔子mq模块”,
运输:transport.RMQ,
选项:{
网址:[
'amqps://usermc:password@grouse.rmq.cloudamqp.com/suiserc',
],
队列:“队列”,
},
},
]),
],
控制器:[],
提供者:[],
导出:[客户端模块],
})
导出类RabbitMQModule{}
@模块({
进口:[
配置模块,
MongooseModule.forFeature([
]),
RabbitMqModule,
],
控制器:[TowerController],
提供者:[TowerService],
出口:[TowerService],
})
导出类TowerModule{}
从'@nestjs/common'导入{Injectable};
从'src/common/helpers/responses/responses.helper'导入{responseCodes};
从“./tower.module”导入{towermodule};
从'@nestjs/microservices'导入{ClientsModule,Transport};
从'@nestjs/microservices'导入{ClientProxy};
从“./rabbitmq.module”导入{RabbitMQModule};
从'@nestjs/common'导入{Inject};
@可注射()
出口级拖车服务{
构造函数(@Inject('rabbit-mq-module')私有只读客户端:ClientProxy,){}
异步运行(数据:任意):承诺{
返回新承诺(异步(解析、拒绝)=>{
常数响应=真;
let模式;
this.client.send(模式、数据);
数据['users']='new';
解析(数据);
});
}
}

能否显示
客户端模块的设置?您是否尝试过添加一个
onModuleInit
接口和方法来运行
this.client.connect()
?你检查过这个客户端所指的是什么吗?当然,我在这里实现了它,然后我有一个兔子的文件

@Injectable()
export class towelService {
  constructor( @Inject('RabbitMQModule') private readonly client: ClientProxy,) {}

//async run(data: any): Promise<any> {
 //CHANGED TO Just 
run(data: any)  
   //DELETED tp  return new Promise(async //(resolve,reject) => {
      const response = true;
      let pattern;
      

          this.client.send(pattern, data);
          data['users'] = 'new';
         // DELETED  resolve(data);
    
    };
  }
}