3
respostas

JSON.stringipy converte objetos Negociação

Fiz o desafio capturando os dados do formulário e criando um objeto Negociacão para então fazer um json dele. No entanto dá erro 500 quando envio o json de Negociação, o que não acontece quando envio um json que foi criado através do Object.

<script>

        function sendPost(event) {

            event.preventDefault();
            console.log("Enviando post");

            //aqui você deve ler os dados do formulário
            let $ = document.querySelector.bind(document);
            let data = $('#data');
            let quantidade = $('#quantidade');
            let valor = $('#valor');            

            //criando um JSON o este código da erro
            let negociacao = new Negociacao(
                 new Date(DateHelper.textoParaData(data.value)), quantidade.value, valor.value);
            console.log(negociacao);

            // com esse código não da erro
            // let negociacao = {
            //     data: data.value,
            //     quantidade: quantidade.value,
            //     valor: valor.value
            // }

            //construir o json
            var json = JSON.stringify(negociacao);
            console.log(json);

            //enviar o XMLHttpRequest
            let xhr = new XMLHttpRequest();
            xhr.open('POST','/negociacoes', true);
            xhr.setRequestHeader('Content-type', 'application/json');

            xhr.onreadystatechange = ()=>{
                if(xhr.readyState == 4){
                    if(xhr.status == 200){
                        data.value = '';
                        valor.value = 0.0
                        quantidade.value = 1;
                        data.focus();
                        alert('negociação enviada com sucesso');
                    }else{
                        alert('Não foi possivel enviar a negociação');
                    }
                }

            }
            xhr.send(json);

        }
    </script>

erros do console

Enviando post post.html:47 Negociacao {data: Thu Jan 23 9840 00:00:00 GMT-0300 (Horário de Verão do Amazonas), _quantidade: "100", _valor: "10"} post.html:57 {"data":"9840-01-23T03:00:00.000Z","quantidade":"100","valor":"10"} post.html:78 POST http://www.localhost:3000/negociacoes 500 (Internal Server Error) sendPost @ post.html:78 onclick @ post.html:28

3 respostas

Fala ai Wesley, tudo bem? Consegue postar o erro que está dando? Tente pegar o retorno de API e colar aqui.

Outro detalhe, precisa ver os dados que você está enviando para a API, podem estar diferentes quando usa a classe.

Fico no aguardo, bons estudos.

Segue os erros que aparecem.

Não foi possível enviar a negociação: TypeError: Cannot read property 'replace' of undefined    at api.cadastraNegociacao (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\app\api\index.js:53:43)    at Layer.handle [as handle_request] (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\node_modules\express\lib\router\layer.js:95:5)    at next (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\node_modules\express\lib\router\route.js:131:13)    at Route.dispatch (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\node_modules\express\lib\router\route.js:112:3)    at Layer.handle [as handle_request] (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\node_modules\express\lib\router\layer.js:95:5)    at C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\node_modules\express\lib\router\index.js:277:22    at Function.process_params (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-aula4\aluraframe\server\node_modules\express\lib\router\index.js:330:12)    at next (C:\Users\Wesley Cristiano\Desktop\Wesley\javascript-avancado-ii-aula4\javascript-avancado-ii-...

Estudando um pouco erro deu pra entender o seguinte: a API estão preparada pra pegar um objeto que tenha uma propriedade data no formato 'yyyy-mm-dd' e lá no servidor transformá-la num Date através da linha

 req.body.data = new Date(req.body.data.replace(/-/g,'/'));

do arquivo javascript-avancado-ii-aula4\aluraframe\server\app\api\index.js.

é isso mesmo?

Fala aí Wesley, tudo bem? Parece que você não está enviando as informações do data no corpo da sua requisição.

Antes de fazer a requisição, abre o console do Google Chrome (ou outro navegador) e vá até a aba "Network" (Rede), quando estiver lá, faça a requisição, você irá ver uma linha referente a mesma.

Clicando sobre ela, você consegue ver o que foi enviado no corpo da requisição para a API, precisa ter esse data.

Se não tiver e ele for undefined não será possível trocar os - por /.

Estudando um pouco erro deu pra entender o seguinte: a API estão preparada pra pegar um objeto que tenha uma propriedade data no formato 'yyyy-mm-dd' e lá no servidor transformá-la num Date através da linha

Isso, é exatamente isso, você precisa enviar essa data para que seja possível realizar o replace.

Espero ter ajudado.