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

Erro: TypeError: data.forEach is not a function - O que faço? Please!

Amigos, estou na aula de Fetch API, e após refatorar o código como foi orientado, obtive o seguinte erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O meu código está assim: cliente-service.js

// Fetch form: a fetch já faz um GET e entrega uma Promise.
const listaCliente = async ()=>{
    return fetch('http://localhost:3000/profile').then(
        resposta => {
            return resposta.json() 
        }
    )
}

export const clienteService = {
    listaCliente
}

listaClientes-controller.js

import { clienteService } from "../service/cliente-service.js"

const criaNovaLinha = (nome, email)=>{
    const criaLinhaNovoCliente = document.createElement('tr')
    const conteudo = `
        <td class="td" data-td>${nome}</td>
        <td>${email}</td>
        <td>
            <ul class="tabela__botoes-controle">
                <li>
                    <a href="../telas/edita_cliente.html" class="botao-simples botao-simples--editar">Editar</a>
                </li>
                <li>
                    <button class="botao-simples botao-simples--excluir" type="button">Excluir</button>
                </li>
            </ul>
        </td>
    `
    criaLinhaNovoCliente.innerHTML = conteudo
    return criaLinhaNovoCliente
}

//elemento pai no qual vou colocar o elemento filho (através da função criaNovaLinha()) que tem os dados do cliente
const tabela = document.querySelector('[data-tabela]')


clienteService.listaCliente().then(data =>{
    // data é um objeto com vários elementos (clientes e seus dados (nome, email))
    data.forEach(elemento => {
        //criamos uma nova linha para cada elemento, com seus respectivos dados.
        tabela.appendChild(criaNovaLinha(elemento.nome, elemento.email))
    })
})
4 respostas
solução!

Fala Jady, tudo bem?

O método forEach só esta disponível em arrays, então pode ser que data não esteja retornando um array, tente dar um console.log(data) para verificar se o que está sendo retornado é um array, confirme também se o servidor que você está utilizando a api está ligado npm run server por exemplo. Caso retorne uma array normalmente e continue não funcionando, poderia enviar o seu código compactador por favor? (Seja pelo github, google drive, mega, etc..)

Aguardo o seu retorno :D

Obrigada Mateus! Sim, a api não estava "ligada". Tinha que dar um npm run server. Valeu! Abraço

Com a aula, eu entendi que se eu desse o seguinte comando no terminal: browser-sync start --server --file . --host --port 5000 --startPath admin/telas/lista_cliente.html

eu não precisaria dar o comando: json-server --watch db.json

Este ultimo, entendi que é só para pegar a api. O anterior é para fazer rodar a aplicação. Certo?

Isso mesmo!