Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema no teste do body-parser

Segui a instalação body-parser como o Alberto ensina no video. Porém, quando tento submeter o form de cadastro o body-parser não funciona. O console do nodemon exibe "{}" e o navegador chrome > inspect > network na solicitação exibe a mensagem:

Provisional headers are shown Content-Type:application/x-www-form-urlencoded Origin:http://localhost:3001 Referer:http://localhost:3001/produtos/new Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

<!-- view produtos form -->
<form action="/produtos/salvar" method="post">
    <input type="text" id="title">
    <input type="submit" value="salvar" />
</form>
<!-- config/express.js -->

var express = require('express');
var load = require('express-load');
var bodyParser = require('body-parser');

module.exports = function () {
  var app = express();
  app.set('view engine', 'ejs');
  app.set('views', './app/views');
  app.set('host', 'localhost');
  app.set('port', 3001);

  app.use(bodyParser.urlencoded({extended:true}));

  //carrega as rotas automaticamente
  load('routes', {cwd: 'app'})
    .then('infra')
    .into(app);

  return app;
};
<!-- produtos.js -->

module.exports = function (app) {
  app.get('/produtos', function (req, res) {

    var connection = app.infra.connectionFactory();
    var produtosBanco = new app.infra.ProdutosBanco(connection);
    produtosBanco.lista(function (err, result) {

      if(err){
        res.send('<h1>Erro</h1>');
      }

      res.render('produtos', {livros: result});
      //res.send(result);
    });
    connection.end();
  });

  app.get('/produtos/new', function (req, res) {
    res.render('produto-new');
  });

  app.post('/produtos/salvar', function (req, res) {
    var produto = req.body;
    console.log(produto);
  });

};
1 resposta
solução!

Senhores, descobrir o problema. Um pequeno detalhe que me levou algumas horas.

Não sei porque, mas o body-parser só consegue entender as informações submetidas pelo formulario se houver a propriedade "name" nos campos. Exemplo:

//Correto
<input type="text" id="titulo" name="titulo" />
//Correto
<input type="text" name="titulo" />
//Incorreto
<input type="text" id="titulo"  />

É até lógico! Ele faz o parser do json utilizando a propriedade 'name', o 'id' para esse caso não teve utilidade. Fica a dica!

Abraço!