4
respostas

Retorno da execução do cliente-android.js em HEXA. Por quê?

Percebi no vídeo da aula sobre Content Negotiation que o problema aconteceu com o instrutor e o vídeo foi editado. Após a edição do vídeo, a execução do cliente-android passou a funcionar como deveria. Pergunto: O que foi feito para mostrar o conteúdo correto? No meu, só mostra:

200
<Buffer 3c 68 74 6d 6c 3e 0a 20 20 20 20 3c 62 6f 64 79 3e 0a 20 20 20 20 20 20 20 20 3c 68 31 3e 4c 69 73 74 61 67 65 6d 20 64 65 20 50 72 6f 64 75 74 6f 73 ... >

mesmo eu tendo concatenado 'Corpo' à variável body, como fez o instrutor.

Os códigos estão assim:

/cliente-android.js

var http = require('http');

var configuracoes = {
    hostname:'localhost',
    port:3000,
    path:'/produtos',
    headers: {
        'Accept':'application/json'
    }
};

http.get(configuracoes, function(res) {
    console.log(res.statusCode);
    res.on('data',function(body){
        console.log('Corpo:'+body);
    });
});

e no produtos.js

module.exports = (app) => {

    var listaProdutos = (req, res) => {

        let cnn = app.infra.connectionFactory();
        let produtosDAO = new app.infra.ProdutosDAO(cnn);

        produtosDAO.lista((erros, resultados) => {
            res.format({
                html: () => res.render('produtos/lista', {lista: resultados}),
                json: () => res.json(resultados)
            });
        });
        cnn.end();
    }

    app.get('/produtos', listaProdutos);

    app.get('/produtos/form', (req, res) => {
        res.render('produtos/form');
    });

    app.post('/produtos', (req, res) => {

        let produto = req.body;

        let cnn = app.infra.connectionFactory();
        let produtosDAO = new app.infra.ProdutosDAO(cnn);

        produtosDAO.salva(produto, (erros, resultados) => {
            cnn.end();
            res.redirect('/produtos');
        });
    });
}

Lembrando que o código utilizado nesta aula pelo instrutor está diferente daquele terminado na aula anterior.

O meu código está seguindo o da aula anterior, porém adaptado para arrow functions e utilizando o let no lugar do var em alguns locais para garantir a visibilidade das variáveis somente nos escopos onde foram declaradas.

4 respostas

Fala aí Franco, beleza? Faz tempo que fiz o curso, e olhando o vídeo da aula eu não vi esse problema acontecer.

Mas, no seu caso, eu chutaria você adicionar um Content-Type nos headers da requisição:

var configuracoes = {
    hostname:'localhost',
    port:3000,
    path:'/produtos',
    headers: {
        'Accept':'application/json',
        'Content-Type': 'application/json`
    }
};

Espero ter ajudado.

Já tentei isso e não deu certo. O interessante é que quando testo pelo Postman, funciona. Mas quando testo pelo Node, o resultado sai em hexa.

Meu teste foi feito via Postman também e deu certo.

Franco, no seu console, tente logar de forma separada:

http.get(configuracoes, function(res) {
    console.log(res.statusCode);
    res.on('data',function(body){
        console.log('Corpo:');
        console.log(body);
    });    
});

Se você concatenar com uma String o JavaScript irá transformar seu body em String também.

Espero ter ajudado.

Blz, Matheus. Vou testar e qualquer coisa digo o resultado aqui.

Muito grato!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software