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

Erro com body-parser

Pessoal, estou tendo o seguinte erro ao inserir o comando no prompt:

curl http://localhost:3000/pagamentos/pagamento -X POST -v -H "Content-type:application/json" -d '{"forma_de_pagamento":"payfast","valor":10.98,"moeda":"BRL","descricao":"criando um pagamento"}'

Erro:

SyntaxError: Unexpected token &#39;<br> &nbsp; &nbsp;at parse (C:\Workspace novo
\Javascript\NodeJs\payfast\node_modules\body-parser\lib\types\json.js:83:15)<br>
 &nbsp; &nbsp;at C:\Workspace novo\Javascript\NodeJs\payfast\node_modules\body-p
arser\lib\read.js:116:18<br> &nbsp; &nbsp;at invokeCallback (C:\Workspace novo\J
avascript\NodeJs\payfast\node_modules\raw-body\index.js:262:16)<br> &nbsp; &nbsp
;at done (C:\Workspace novo\Javascript\NodeJs\payfast\node_modules\raw-body\inde
x.js:251:7)<br> &nbsp; &nbsp;at IncomingMessage.onEnd (C:\Workspace novo\Javascr
ipt\NodeJs\payfast\node_modules\raw-body\index.js:307:7)<br> &nbsp; &nbsp;at emi
tNone (events.js:80:13)<br> &nbsp; &nbsp;at IncomingMessage.emit (events.js:179:
7)<br> &nbsp; &nbsp;at endReadableNT (_stream_readable.js:906:12)<br> &nbsp; &nb
sp;at nextTickCallbackWith2Args (node.js:475:9)<br> &nbsp; &nbsp;at process._tic
kCallback (node.js:389:17)
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact

Por favor, alguém saberia como resolver este problema?

3 respostas
solução!

Como eu não tenho o Curl, eu testei usando o Postman. Antes eu validei o formato do JSON que está sendo postado, e ele está OK.

No caso do meu teste, houve o retorno, mas de um JSON de erros (já que estamos validando os dados recebidos antes de continuar). O status de retorno foi 400.

Talvez o problema seja no retorno. Tanto o sucesso quando os erros retornam JSON como resposta.

Segue como está a minha rota pagamentos/pagamento

    app.post("/pagamentos/pagamento", function(req, res){

    req.assert("pagamento.forma_de_pagamento", "Forma de Pagamento e obrigatorio").notEmpty();
    req.assert("pagamento.valor", "Valor e obrigatorio e deve ser um decimal").notEmpty().isFloat();

     var erros = req.validationErrors();
    if (erros){
        console.log('Erros de validação encontrados');
        res.status(400).send(erros);
    }

    var pagamento = req.body["pagamento"];
    pagamento.status = 'CRIADO';
    pagamento.data = new Date();

    var connection = app.persistencia.connectionFactory();
    var pagamentoDAO = new app.persistencia.PagamentoDAO(connection); 
    pagamentoDAO.salva(pagamento, function(erros, resultado){
          if (erros){
              console.log("Erros de validação encontrados");
              res.status(400).send(erros);
              return;
          }

          pagamento.id = resultado.insertId;


         console.log('processando pagamento...');


         if (pagamento.forma_de_pagamento == "cartao"){
             var cartao = req.body["cartao"];
             console.log(cartao);

             var clienteCartoes = new app.servicos.clienteCartoes();
             clienteCartoes.autoriza(cartao, function(exception, request, response, retorno){
                 if (exception){
                    console.log(exception); 
                    res.status(400).send(exception);
                 }
                 res.status(201).json(cartao);
                  return;

             });


         } else {

             res.location('/pagamentos/pagamento/' + resultado.insertId);
            //res.send(pagamento);

              var response = {
                  dados_do_pagamento: pagamento,
                  links:[
                  {
                      href: "http://localhost:3000/pagamentos/pagamento/"+ pagamento.id,
                      rel: "confirmar",
                      method: "PUT"

                  },
                  {
                      href: "http://localhost:3000/pagamentos/pagamento/"+ pagamento.id,
                      rel: "cancelar",
                      method: "DELETE"

                  }
                  ]
              };


            res.status(201).json(response);
         }



    });

    });

O meu arquivo custom-express está assim

var express = require("express");
var consign = require("consign");
var bodyParser = require("body-parser");
var expressValidator = require("express-validator");


module.exports = function (){
    var app = express();

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

    consign()
    .include('controllers')
    .then ('persistencia')
    .then ('servicos')
    .into(app);
    return app;
}

Então...é que esqueci de deixar escrito que tive esse erro no começo do curso ainda, quando o professor ainda estava validando se o primeiro método POST estava retornando algo no console rs...

Vou tentar validar do mesmo jeito que vc fez no POSTMAN. E também vou verificar novamente se meu código está com erro.

Valeu pela resposta.

Resolvi usar o Postman também pra fazer meus testes e ai deu certo. Valeu pela sugestão Daniel.