2
respostas

[Dúvida] Erro: WHERE paramer \"id\" has invalid \"undefined\" value

Quando mando POST para o endpoint http://localhost:3000/seguranca/acl com o body JSON:

{
    "roles": ["3364d111-86bc-408b-a13b-0ebf9eeedeee"],
    "permissoes": ["1507fc56-424f-412a-88e8-0cc5e44a3917"]
}

Eu recebo:

{
    "message": "WHERE parameter \"id\" has invalid \"undefined\" value"
}

Eu consultei meu bd para conferir se os IDs que estou mandando batem:

seguranca_nodejs_development=# select * from permissoes;
                  id                  |  nome  |        descricao         |         createdAt          |         updatedAt
--------------------------------------+--------+--------------------------+----------------------------+----------------------------
 1507fc56-424f-412a-88e8-0cc5e44a3917 | editar | poder editar os produtos | 2023-09-04 12:12:10.802-03 | 2023-09-04 12:14:53.378-03
(1 row)


seguranca_nodejs_development=# select * from roles;
                  id                  |  nome   |    descricao    |         createdAt         |         updatedAt
--------------------------------------+---------+-----------------+---------------------------+---------------------------
 3364d111-86bc-408b-a13b-0ebf9eeedeee | Gerente | Usuario gerente | 2023-09-04 11:12:31.32-03 | 2023-09-04 11:12:31.32-03
(1 row)

E parece estar tudo certo. O controller e service de Seguranca estão batendo com o do projeto do curso, mas não sei até onde este erro pode estar no meu código.

Aqui está meu código até aqui: https://github.com/capella-marcosfilipe/seguranca-nodejs/tree/duvida

2 respostas

Olá, Marcos! Tudo bem?

Pelo que pude analisar na sua dúvida e no código compartilhado, parece que o erro está relacionado ao parâmetro "id" que está sendo passado como "undefined". Isso geralmente ocorre quando o código tenta acessar uma propriedade que não existe ou não foi definida.

No seu caso, o erro pode estar na parte do código onde você está tentando acessar o "id" do usuário. No trecho de código do curso que você compartilhou, o "id" do usuário é acessado da seguinte maneira:

where: {
    id: dto.usuarioId
}

Verifique se o "usuarioId" está sendo enviado corretamente na requisição e se está sendo recebido corretamente no backend. Você pode fazer isso adicionando alguns console.log no seu código para verificar o valor de "dto.usuarioId".

Se o "usuarioId" estiver sendo enviado e recebido corretamente, o problema pode estar em outra parte do código. Nesse caso, eu sugiro que você verifique todas as partes do seu código onde o "id" está sendo acessado e certifique-se de que o objeto ou variável que contém o "id" está sendo definido corretamente.

Espero ter ajudado e bons estudos!

Ainda não consegui uma solução para isso, mas relendo meu código fiquei em dúvida em como esta função de SegurancaController.js funciona:

  static async cadastrarAcl(req, res) {
    const { roles, permissoes } = req.body;
    const { usuarioId } = req;
    try {
      const acl = await segurancaService.cadastrarAcl({ roles, permissoes, usuarioId });
      res.status(201).send(acl);
    } catch (error) {
      res.status(400).send({ message: error.message });
    }
  }

Ao que me parece o usuarioId viria da requisição, mas neste caso que apenas uso req, de que parte da requisição ele viria. Até aqui eu tinha usado puxando de req.body ou req.params, mas não uma requisição inteira.

A minha requisição no postman é montada com o body que mandei antes, e no headers eu tenho o Authorization com o "Bearer < valor do accessToken >".

Não estou ainda conseguindo lidar com esse problema por não compreender bem o que está acontecendo nessa chamada.