无法读取未定义的属性(读取“voto”)和其他属性

问题描述 投票:0回答:1

我的异步函数基本上在高威望用户评估普通用户的问题时起作用,他给出了赞成票或反对票,如果问题有-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),如如果它没有从邮递员那里得到信息,我已经尝试过记录,但没有任何结果。

node.js docker rabbitmq nestjs
1个回答
0
投票

您没有将具有

dados
属性的对象从网关控制器发送到您的微服务。该对象的属性为
idUsuario
idUsuarioPropio
idPergunta
data
。它看起来就像您期望
dados
成为
data
属性,如果是这样的话,那么您应该相应地更新您的类型

© www.soinside.com 2019 - 2024. All rights reserved.