Fabio, desculpa a demora, mas testei aqui e tenho uma hipótese, acontece que talvez esse usuário em branco já esteja em seu banco.
Outra coisa que achei estranho é que o post está dentro de um loop e nesse loop você tem um push no array de platar e está sempre enviando esse objeto novamente, a dica é que você faça o loop e depois dele faça um post só com todos os dados.
O que estava assim:
function sincronizaPlacar(){
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
};
console.log(dados);
$.post("http://localhost:3000/placar", dados, function(){
console.log("SALVOU");
});
});
}
fica assim:
function sincronizaPlacar(){
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("SALVOU");
});
}
O problema que pode ter acontecido é que, quando você tinha uma tr em branco no HTML, na hora de fazer o sinc, ele foi pego e enviado para o servidor.
Minha recomendação é: apaga o data.db na pasta servidor, reinicia o jogo com essa alteração e tenta novamente.