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

Duvida sobre $.post

Estava acompanhando o curso, pausando assim que ele apresentava qual seria a próxima funcionalidade que iria implementar e fazendo antes de ver a forma que ele faria. Fiz um código muito parecido, mas usei "arrayPlacar" como nome para a variável e dessa forma não funcionava o meu código (mas o erro aparecia no terminal do servidor, não no console), quando vi o vídeo, fiz as alterações e vi que o problema estava no nome dessa variável. Segue o código

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: " + dados);

    $.post("http://localhost:3000/placar", dados, function () {
        console.log("enviei, brother");

    })
}

Qual o motivo desse erro? Segue abaixo, o log do servidor no terminal

TypeError: Cannot read property '_id' of undefined
    at Datastore.prepareDocumentForInsertion (D:\DEV\Formação Engenheiro Front-End\JQuery\servidor\node_modules\nedb\lib\datastore.js:384:21)
    at Datastore._insert (D:\DEV\Formação Engenheiro Front-End\JQuery\servidor\node_modules\nedb\lib\datastore.js:347:24)
    at D:\DEV\Formação Engenheiro Front-End\JQuery\servidor\node_modules\nedb\lib\executor.js:40:13
    at Object.process (D:\DEV\Formação Engenheiro Front-End\JQuery\servidor\node_modules\nedb\node_modules\async\lib\async.js:731:21)
    at next (D:\DEV\Formação Engenheiro Front-End\JQuery\servidor\node_modules\nedb\node_modules\async\lib\async.js:728:27)
    at Immediate.<anonymous> (D:\DEV\Formação Engenheiro Front-End\JQuery\servidor\node_modules\nedb\node_modules\async\lib\async.js:24:16)
    at runCallback (timers.js:810:20)
    at tryOnImmediate (timers.js:768:5)
    at processImmediate [as _immediateCallback] (timers.js:745:5)
2 respostas
solução!

Olá Guilherme,

O seu código estava correto, o erro aconteceu devido o servidor esperar a tag placar, é a definição da api no server mesmo.

Caso tenha curiosidade abra o arquivo placar.js na seguinte pasta: servidor/app/api/

Na linha 18 tem esse trecho de código:

db.insert(req.body.placar, function(err, newDoc) {

Este é um código javascript para um serviço usando o NodeJs. Basicamente ele pega a requisição feita em seguida o body e então busca um atributo no json do body com o nome placar, e faz a inserção no banco usando essas propriedades, é por isso que neste trecho de código abaixo:

var dados = {
        Placar: Placar
    };

Você usa o nome Placar, a sua lista de objetos poderia ser qualquer nome, assim funcionaria também Placar: listaPlacar.

O primeiro atributo antes dos dois pontos é o nome da sua variavel em um objeto json. Em qualquer integração com api você sempre terá essas regras de nomenclatura.

Caso tenha curiosidade em saber como funciona um backend feito usado javascript recomendo realizar o curso de nodejs na alura, caso não queira não se preocupe pois no decorrer da Formação Front-End, você entenderá melhor sobre objetos json.

Perfeita a explicação, muito obrigado!