Express NestJS UnhandledPromisejectionWarning:TypeError:this.client.send不是函数
我正在构建一个使用express的nestJS api,并尝试连接到rabbitMQ,每项都达到了99%,在实现了所有必要的代码之后,我遇到了最后一个问题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
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);
};
}
}