Olá, Alan! Tudo ok contigo?
Esse erro geralmente ocorre quando tentamos usar o método forEach em uma variável que não é do tipo array. No seu caso, o objeto data não está se comportando como um array, o que causa esse erro.
Aqui estão algumas observações que podem ajudar a solucionar o problema:
Verifique a Estrutura dos Dados:
O erro "Uncaught TypeError: data.forEach is not a function" ocorre porque data não é um array. Para resolver isso, você deve garantir que data seja, de fato, um array. Isso depende do que está sendo retornado pela requisição em http://localhost:3000/profile. Certifique-se de que o servidor esteja respondendo com um array JSON válido.
Verifique o Uso de Arrow Functions:
Note que você está usando uma função de seta (() => {}) dentro do forEach. Isso não é necessário, a menos que você esteja planejando fazer algo específico dentro dessa função. Se você só quer percorrer os elementos do array data e adicionar linhas à tabela, pode simplesmente fazer:
data.forEach((elemento) => {
tabela.appendChild(criaNovaLinha(elemento.nome, elemento.email));
});
Confira as Chamadas de XMLHttpRequest:
Verifique se as chamadas XMLHttpRequest estão sendo feitas corretamente e se o servidor está respondendo como o esperado. Certifique-se também de que os endpoints como http://localhost:3000/profile/semanaPassada e http://localhost:3000/profile/semanaRetrasada estão disponíveis e respondendo corretamente.
Lide com Erros nas Requisições:
Para evitar problemas futuros, é importante adicionar tratamento de erros nas suas requisições. Você pode fazer isso adicionando um evento onerror às suas chamadas XMLHttpRequest. Isso permitirá que você identifique e trate erros de rede ou problemas de comunicação com o servidor.
Aqui está uma versão revisada do seu código com essas considerações:
http.open('GET', 'http://localhost:3000/profile');
http.send();
http.onload = () => {
if (http.status === 200) {
try {
const data = JSON.parse(http.response);
if (Array.isArray(data)) {
data.forEach((elemento) => {
tabela.appendChild(criaNovaLinha(elemento.nome, elemento.email));
});
} else {
console.error("O servidor não retornou um array JSON válido.");
}
} catch (error) {
console.error("Erro ao analisar a resposta JSON:", error);
}
} else {
console.error("Erro na requisição:", http.status, http.statusText);
}
};
http.onerror = (error) => {
console.error("Erro na requisição:", error);
};
// Continuar com as outras chamadas XMLHttpRequest (http2 e http3), se necessário.
Esta versão inclui tratamento de erros e verificações adicionais para garantir que o objeto data seja um array antes de usar o método forEach. Certifique-se de que o servidor retorne um JSON válido e que as chamadas XMLHttpRequest estejam configuradas corretamente.
Espero que esta explicação e as sugestões tenham ajudado a esclarecer o problema e a encontrar uma solução.
Espero que tenha te ajudado, abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor marque ele como solução! ✓