Boa tarde,
Toda vez que tento sincronizar os dados com o servidor, no cmd do node me é gerado seguinte erro:
TypeError: Cannot read property '_id' of undefined
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa tarde,
Toda vez que tento sincronizar os dados com o servidor, no cmd do node me é gerado seguinte erro:
TypeError: Cannot read property '_id' of undefined
Olá Raquel,
Pode postar o código do seu arquivo .js por favor ?
Bom dia,
Aqui está o código da função:
$('#botao-sync').click(sincronizarPlacar);
function sincronizarPlacar() {
var placar = [];
var linhas = $('tbody>tr');
linhas.each(function() {
var usuario = $(this).find('td:nth-child(1)').text();
var palavras = $(this).find('td:nth-child(2)').text();
var score = {
usuario:usuario,
pontos:palavras
};
placar.push(score);
var dados = {
placar: placar
};
$.post('http://localhost:3000/placar'), dados, function() {
console.log('Placar sincronicado com sucesso');
};
});
Olhando o código, o que eu entendi é que você pega todas as linhas de uma tabela, e para cada uma, cria um objeto score com usuário e nome. Esse objeto você guarda num array fora do loop chamado placar. Para cada linha, você posta o array atualizado para o seu servidor, dentro do objeto dados.
Não vejo um erro neste JS, como você comentou um problema no terminal, creio que no lado do server que está o problema.
Eu achei uma descrição de erro igual a sua, veja se este link te ajuda:
http://stackoverflow.com/questions/18542329/typeerror-cannot-read-property-id-of-undefined
Olá Raquel,
Este erro está na sua função, que para cada linha você envia um POST.
O certo seria enviar o POST apenas depois que o each() terminar. Tente substituir sua função por esta, já corrigida:
$('#botao-sync').click(sincronizarPlacar);
function sincronizarPlacar() {
var placar = [];
var linhas = $('tbody>tr');
linhas.each(function() {
var usuario = $(this).find('td:nth-child(1)').text();
var palavras = $(this).find('td:nth-child(2)').text();
var score = {
usuario:usuario,
pontos:palavras
};
placar.push(score);
});
var dados = {
placar: placar
};
$.post("http://localhost:3000/placar", dados, function(){
console.log("Placar sincronizado com sucesso");
});
}