Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[JS na Web: CRUD com JS assíncrono] TypeError: data.forEach is not a function- Como solucionei o problema

Olá pessoal, tudo bem?

Ao fazer o curso "JS na Web: CRUD com JS assíncrono" passei a receber também um typeError dizendo que o forEach não seria uma função para "data". Percebi que alguns colegas tiveram o mesmo problema e passei a tentar identificar qual seria a solução. Primeiro investiguei na documentação do JS o que era exatamente um TypeError:

*O que é um TypeError? * O TypeError é ativado quando um operador ou argumento passado para uma função é incompativel com o tipo esperado por esse operador ou função.

Ou seja, forEach() estaria recebendo um tipo que não seria capaz de resolver. Reesolvi olhar quais tipos seriam esses?

Array.prototype.forEach() O método forEach() executa uma dada função em cada elemento de um array.

Logo, data não estava recebendo um array. Fui atrás de quem estava fornecendo a informação através de fetch: o servidor em json

colei a url no meu navegador que fetch estava processando no código:

http://localhost:3000/profile

O JSON Server apresentou um menu com os dados que estava buscando em "db.json" , entretanto o conteúdo desse json não estava condizendo com o que estava sendo solicitado pelo objeto clienteService em listaClientes-controller.js Olhei então o conteúdo do arquivo db.json dentro do VSCode:

{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" }
  ],
  "comments": [
    { "id": 1, "body": "some comment", "postId": 1 }
  ],
  "profile": { "name": "typicode" }
}

Mas quando esses dados foram inseridos nesse arquivo, considerando que o projeto foi puxado diretamente do github da aula? Aparentemente no momento em iniciamos o servidor com a linha de comando "json-server --watch db.json" o script não encontrou o arquivo db.json e, para que pudesse rodar, criou um arquivo padrão para que o server não retornasse um erro. Isso provavelmente aconteceu porque executamos o comando dentro do diretório "admin" quando o correto seria te-lo executado no diretório "PROJETO_INICIAL"

Deletei o db.json criado e o problema foi resolvido.

Espero ter ajudado!

2 respostas
solução!

Olá Rodrigo!

Seus pontos foram muito bem citados!

Gostaria de complementar sua resposta sobre o erro: O seu forEach não foi encontrado pelo seguinte motivo (além dos demais q vc citou):

{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" }
  ],
  "comments": [
    { "id": 1, "body": "some comment", "postId": 1 }
  ],
  "profile": { "name": "typicode" }
}

Se você perceber o data nesse exato momento está como um objeto, e dentro desse objeto, possui alguns keys, Algumas delas, possuem um array. Entao nesse exemplo o forEach só funcionaria nas keys que tiver um value como array. Exemplo data.posts.forEach ou data.comments.forEach . Isso por que o forEach só funciona caso o item que você selecionou for um array.

Também é sempre bom ficar atento no caminho/local que estamos rodando comandos de terminal para evitar conflitos como esse!

Caso você se sentir confortável, pode marcar sua dúvida/dica como concluida!

Valeu Nikolai! Caso o projeto tivesse utilizado uma estrutura similar à o json criado pelo JSON SERVER funcionaria na boa! Obrigado pelo feedback!