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

cadastra-livros-terminal

Agora tenho o mesmo erro Cannot Post /produtos.

O que precisa pra rodar node cadastra-livros-terminal.js? Roda node app antes? O que eu esqueci dessa vez?

O que faz essa parte do código?

var client = http.request(configuracoes, function(res){
    console.log(res.statusCode);
    res.on('data', function(body){
        console.log('Corpo:' +body);
    });
});
var http = require('http');

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

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

var produto = {
    titulo : 'mais sobre node',
    descricao: 'node, javascript e um pouco sobre http',
    preco: 100
};


client.end(JSON.stringify(produto));
5 respostas

Opa Gisele, vc quase sempre precisa rodar o app antes, para colocar o servidor no ar. Também verifique se o endereço da sua rota que recebe o cadastro de produtos é /produtos.

Você precisa primeiro iniciar o servidor conforme foi recomendando acima.

Depois, numa outra janela de terminal, rodar o cadastra-livros-terminal.

Dentro de sua aplicação, no seu arquivo de rotas, (caminho "app/routes/produtos.js"), deve existir a seguinte rota:

module.exports = function(app){
    app.post('/produtos',function(req,res){
        //Programacao para gravar o que veio de " cadastra-livros-terminal"
    }

    //Demais rotas de sua aplicação
}

Você já deve ter uma rota para "/produtos", mas, apenas para o verbo GET. Essa rota que você precisa criar é para o verbo POST

Pelo que eu vi, a programação deve seguir o mesmo conceito da rota "/produtos/salva" (POST).

Oi, eu não consigo achar onde teve alteração de /produtos/salva para /produtos, porque se eu altero a rota e tiro o /salva, ele não cadastra mais, então eu preciso de ajuda para encontrar onde eu tenho que mudar as rotas, porque não está funcionando o cadastro terminal.

Produtos.js

module.exports = function(app) {
   var listaProdutos = function(req,res){
       var connection = app.infra.connectionFactory();
        var produtosBanco = new app.infra.ProdutosDAO(connection);

        produtosBanco.lista(function(erros, resultados){
             res.format({
                html: function(){
                    res.render("produtos/lista",{lista:resultados});
                },
                json: function(){
                    res.json(resultados);
                }
            });
        });

        connection.end();
   };

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

    app.get('/produtos/form', function(req,res){
      res.render('produtos/form', {errosValidacao:{}, produto: {}});
    });
    app.post('/produtos/salva', function(req,res){

        var produto = req.body;

        req.assert('titulo','Titulo é obrigatório').notEmpty()
        req.assert('preco','Formato inválido').isFloat()

        var erros = req.validationErrors();
        if(erros){
          res.format({
                 html: function(){
                    res.status(400).render('produtos/form',{errosValidacao:erros,produto:produto});
                 },
                 json: function(){
                     res.status(400).json(erros);
                 }
             });
          return;
        }

        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);
        produtosDAO.salva(produto, function(erros, resultados){
            console.log(erros);
            res.redirect('/produtos');
        });
    })
}

cadastro-livros-terminal

var http = require('http');

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

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

var produto = {
    titulo : 'mais sobre node',
    descricao: 'node, javascript e um pouco sobre http',
    preco: 100
};


client.end(JSON.stringify(produto));

É estranho, porque eu tinha só tirado o salva das rotas, mas quando manda salvar ainda aparece:

Cannot POST /produtos/salva

Tem mais algum lugar pra mudar? Tem alguma outra rota errada?

Tá no seu código, ali, onde tem produtos/salva, vc troca pra /produtos.

solução!

Achei, estava no form.ejs, no envio do formulario.