4
respostas

Erro provável no Server

Olá a todos. No terminal onde subo o servidor com

npm start

tenho recebido a seguinte mensagem:

(node:3760) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated

Não sei se é devido a essa mensagem, mas o botão "Importar Negociações" parou de funcionar. Tava funcionando até antes da implementação do JSON.parse, exibindo o array de objetos. Agora nada.

class NegociacaoController {

    constructor() {

        let $ = document.querySelector.bind(document);

        this._inputData = $("#data");
        this._inputQtde = $("#quantidade");
        this._inputValor = $("#valor");

        this._listaNegociacoes = new Bind(
            new ListaNegociacoes(), new NegociacoesView($('#negociacoesView'), 'adiciona', 'esvazia'));

        this._mensagem = new Bind(
            new Mensagem(), new MensagemView($('#mensagem'), 'texto'));
    }

    adicionaNegociacao(event) {

        event.preventDefault();
        this._listaNegociacoes.adiciona(this._criaNegociacao());
        this._mensagem.texto = 'Negociação adicionada com sucesso!';
        this._limpaFormulario();
    }

    importaNegociacoes() {

        let xhr = new XMLHttpRequest();
        xhr.open('GET', 'negociacoes/semana');

        xhr.onreadystatechange = () => {

            if (xhr.readyState == 4) {

                if (xhr.status == 200) {

                    JSON.parse(xhr.responseText)
                        .map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor))
                        .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));

                } else {

                    console.log(xhr.responseText);
                    this._mensagem.texto = 'Não foi possível obter os dados do servidor.';

                }
            }
        }

        xhr.send();
    }

    limpaLista() {

        this._listaNegociacoes.esvazia();
        this._mensagem.texto = 'Lista apagada com sucesso';
    }

    _criaNegociacao() {

        return new Negociacao(
            DateHelper.textoParaData(this._inputData.value),
            this._inputQtde.value,
            this._inputValor.value
        )
    }

    _limpaFormulario() {

        this._inputData.value = '';
        this._inputQtde.value = 1;
        this._inputValor.value = 0.0;
        this._inputData.focus();
    }
}
4 respostas

Acho que o que está acontecendo é que a view não está sendo atualizada. Mas não sei porque. Revisei o código todo relacionado à atualização do modelo e da view e está como antes, quando a view era atualizada normalmente.

Fala ai Mubarak, tudo bem? Esse mensagem é apenas um warning não deveria quebrar a API.

O problema provavelmente como tu disse está na aplicação, o mesmo pode estar ocorrendo por N razões.

Tente verificar se ao clicar no botão de importar está dando algum erro no console do navegador referente ao JavaScript ou se a página está sendo recarregada.

Espero ter ajudado.

Pois é... verifiquei o console e nada. Conferi a ação no HTML e também não vi nada de diferente. Revisei as classes de modelo e view e também nada de diferente, até porque elas não foram alteradas. Mas vou continuar tentando. Obrigado pelo retorno.

Fala Mubarak, posso te pedir um favor? (deveria ter pedido antes já).

Compartilhar o projeto atual completo comigo, assim eu consigo simular o problema por aqui e analisá-lo com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.