我的异步函数基本上在高威望用户评估普通用户的问题时起作用,他给出了赞成票或反对票,如果问题有-1票,则普通用户失去了威望,但它给出了一个错误,我将显示在代码后面。
我的服务(问题-rabbitmq):
async usuarioPrestigiadoAtualiza(idUsuario: string, idUsuarioPropio: string, idPergunta: string, dados: atualizaEspecificoDTO) {
const usuario = await this.usuarioMetaRepository.findOne({where: {id: idUsuario}})
if(usuario === null){
throw new NotFoundException('Usuario Prestigiado nao existe')
}
const usuario2 = await this.usuarioMetaRepository.findOne({where: {id: idUsuarioPropio}})
if(usuario2 === null){
throw new NotFoundException('Usuario Propio nao existe')
}
// if(usuario2.pergunta.id !== perguntaAchada.id){
// throw new UnauthorizedException('Usuario Propio nao possui essa pergunta')
// }
const perguntaAchada = await this.perguntaRepository.findOne({where: {id: idPergunta}})
if(perguntaAchada === null){
throw new NotFoundException('Pergunta nao existe')
}
if(usuario.prestigio < 100){
throw new UnauthorizedException(`Usuario: ${usuario.nome} nao possui prestigio suficiente!`)
}
if (dados.voto === -1) {
usuario2.prestigio -= 5;
usuario2.voteForce -= 2;
} else if (dados.voto >= 1) {
for (let i = 0; i < 100; i++) {
if (usuario2.pergunta.voto + 1) {
usuario2.prestigio += 4;
usuario2.voteForce += 1;
}
}
}
if (usuario.voteForce > 30) {
dados.voto *= 2;
}
if (usuario.voteForce > 60) {
dados.voto *= 3;
}
if (usuario.voteForce >= 100) {
dados.voto *= 4;
}
if(usuario2.prestigio >= 100){
usuario2.prestigio === 100
}
// if(dados.voto >= -10){
// return await this.perguntaRepository.remove(perguntaAchada)
// }
perguntaAchada.id = dados.id
perguntaAchada.titulo = dados.titulo
perguntaAchada.voto = dados.voto
perguntaAchada.pergunta = dados.pergunta
const perguntaMudadaPorPrestigiado = await this.perguntaRepository.save(perguntaAchada)
console.log(perguntaMudadaPorPrestigiado)
return perguntaMudadaPorPrestigiado
}
如果需要我的控制器(rabbitmq)
@MessagePattern({ cmd: 'put-perguntaPrestigio'})
async enviarPerguntaAvaliada(@Ctx() contexto: RmqContext, @Payload() payload: { idUsuario: string; idUsuarioPropio: string; idPergunta: string; dados: atualizaEspecificoDTO }){
const channel = contexto.getChannelRef()
const message = contexto.getMessage()
channel.ack(message)
return this.perguntaService.usuarioPrestigiadoAtualiza(payload.idUsuario, payload.idUsuarioPropio, payload.idPergunta, payload.dados )
api网关控制器:
@Put('usuarioM/:id1/:id2/:id3')
async perguntaAtualizaPorPrestigiado(@Param('id1') idUsuario: string, @Param('id2') idUsuarioPropio: string, @Param('id3') idPergunta: string, @Body() data: atualizaEspecificoDTO) {
return this.authServico.send(
{
cmd: 'put-perguntaPrestigio'
}, {idUsuario, idUsuarioPropio, idPergunta, data}
)
}
正如我所说,我需要一个高威望的用户来评估一个普通用户,但是当我尝试发布用户的问题时,它说:
ERROR [RpcExceptionsHandler] Cannot read properties of undefined (reading 'voto')
当我删除投票时,它会与 id 一起发生,如果我删除 id,它会与标题等一起发生,DTO 的所有属性,我正在使用一个实体,但我更喜欢更新找到的问题(perguntaAchada),如如果它没有从邮递员那里得到信息,我已经尝试过记录,但没有任何结果。
您没有将具有
dados
属性的对象从网关控制器发送到您的微服务。该对象的属性为 idUsuario
、idUsuarioPropio
、idPergunta
和 data
。它看起来就像您期望dados
成为data
属性,如果是这样的话,那么您应该相应地更新您的类型