3

I have a node express app (i'm trying to make a rest api) and it has a view index.ejs which contains a form for username, name and message fields (as inputs) and everytime the form is submited, the request is successful and a new user is added to the database (i'm using redis, but that's not important for this question). The problem is that when i try to make the request via POSTMAN with the same parameters it always fails (i tried both with a json object inserted in the body raw board and when it failed i also tried with x-www-form-urlencoded but these values where always undefined in the server's router for req.body.username, req.body.name).

The json object inserted was this:

{
    "username" : "shahid85@codeforgeek.com",
    "message" : "shahid message shahid message shahid message shahid message",
    "name" : "simple"
}

i was trying to find some solutions like to force the content-type to json but it didn't work too.

This is my app.js

var express = require('express'),
app = express(),
redis = require('redis'),
config = require('./config'),
client = redis.createClient(config.redisConf),
flow = require('flow-maintained'),
//  https://www.npmjs.com/package/flow-maintained
bodyParser = require('body-parser');

/***************************/

client.auth('redistest1');

client.on("error", function (err) {
console.log("Error " + err);
});

client.on('connect', function() {
console.log('connected to redis!!');

});


/*******************************/
app.set('view engine', 'ejs');
/*app.use(function(req, res, next) {
    // IE9 doesn't set headers for cross-domain ajax requests
    if(typeof(req.headers['content-type']) === 'undefined'){
        req.headers['content-type'] = "application/json; charset=UTF-8";
    }
    next();
})
.use(bodyParser.urlencoded({extended: false}));*/

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



app.get('/', function(req, res){
  GetMessages(function(messages){       
    res.render('index', {messages: messages});
  });
});



app.get('/messages', function(req, res){
  GetMessages(function(messages){
    console.log(' GetMessages is running !!!!');
    console.log('log-code 0003 :: messages.toString() : ' + messages.toString());
    console.log('log-code 0004 :: messages : ' + messages);
    res.json({messages: messages});     
  });
});

app.get('/messages/:id', function(req, res){
    var msgid = req.params.id;
    console.log('log-code 0000 :::     msgid : '+ msgid);

    FetchMessage(msgid, function(msg){
        console.log('log-code 0001 :::     message:'+ msgid+' : '+ msg);
        res.json({message: msg});
    });



});


app.post('/', function(req, res){

    console.log('log-code 0012 ---:::     id:'+ req.body.id);
    console.log('log-code 0013 ---:::     username: '+ req.body.username);
    console.log('log-code 0014 ---:::     name : '+ req.body.name);
    console.log('log-code 0015 ---:::     message:'+ req.body.message);

  var username = req.body.username;
  var name = req.body.name;

  GetUserID(username, name, function(userid){ // GetUserID va chercher si un "user:username" existe déjà
                                              // dans la base, si pas trouvé elle crée un nouvel 
                                              //  key ""user:username"" --> value "userid" (en passant 
                                              //  "user" et "username" à CreateUser() qui elle va incrémenter 
                                              //  "next:user:id" et l'utilise comme userid du nouvel "user:username" créé)
    AddMessage(req.body.message, userid, function(messid){
      console.log('Added message: ' + messid);
      res.redirect('/');
    });
  });
});

app.post('/messages', function(req, res){

    console.log('log-code 0018 ---:::     id:'+ req.body.id);
    console.log('log-code 0016 ---:::     username: '+ req.body.username);
    console.log('log-code 0017 ---:::     name : '+ req.body.name);
    console.log('log-code 0018 ---:::     message:'+ req.body.message);
    console.log('log-code 0018 ---:::     id:'+ req.body.id);

  var username = req.body.username;
  var name = req.body.name;

  res.write('\n Bien le bonjour');
  res.end();

});

function CreateUser(username, name, cb){
  client.incr('next:user:id', function(err, userid){
            /*
                Returned value userid is the Integer reply: the value of key after the increment
                see : http://redis.io/commands/incr
            */
    flow.exec(
      function(){
        var user_string = 'user:' + userid;
        client.set('user:' + username, userid, this.MULTI());
        client.hset(user_string, 'name', name, this.MULTI());
        client.hset(user_string, 'username', username, this.MULTI());
      },function(args){
        cb(userid);
      }
    );
  });
};

function GetUserID(username, name, cb){
  client.get('user:' + username, function(err, userid){
    if(userid){
      cb(userid);
    }else{
      CreateUser(username, name, function(new_user){
        cb(new_user);
      });
    }
  });
};

function AddMessage(message, userid, cb){
  client.incr('next:message:id', function(err, id){
    flow.exec(
      function(){
        var mess_id = 'message:' + id;
        client.set(mess_id, message, this.MULTI());
        client.set(mess_id + ':user', userid, this.MULTI());
        client.lpush('messages', id, this.MULTI());
      },function(){
        cb(id);
      }
    );
  });
};


function FetchMessage(id, cb){



  /********************************************/
   // conversion du code en-dessus au flow maintained
   var msg;
    flow.exec(
      function(){
        client.get('message:' + id, this);          
      },function(err, message) {

        msg = message;

        client.get('message:' + id + ':user', this);        
      },function(err, userid) {

        client.hget('user:' + userid, 'name', this);        
      },function(err, name){

        cb({message: msg, name: name});
      }
    );

    /*********************************************/     

};

function GetMessages(cb){
  flow.exec(
    function(){
      client.lrange('messages', 0, -1, this);
    },function(err, messages){
      //an async foreach
      var final_messages = [];
      flow.serialForEach(messages, function(el){
        FetchMessage(el, this);
      },function(mess){
        console.log('log-code 0005 :: mess to be added : ' + mess.toString());
        final_messages.push(mess);
      },function(){
        cb(final_messages);
      });
    }
  );
};


app.listen(8003);

enter image description here

Community
  • 1
  • 1
Bardelman
  • 2,176
  • 7
  • 43
  • 70

2 Answers2

0

Enter your key-value pairs by clicking the "params" button, located just to the left of the blue submit button at the top right of the window. That should work.

John Paschal
  • 85
  • 2
  • 6
  • 1
    Although actually if you put them under the "params" you'll have to get the parameters as req.query.username and req.query.message etc... instead of req.body.username. – John Paschal Aug 25 '16 at 14:49
0

This worked for me.

  1. Enter data in "x-www-form-urlencoded" on Postman use "x-www-form-urlencoded"
  2. Write this in your app.js file -> app.use(bodyParser.urlencoded({extended: true}));
  3. Use this format to get desired values -> req.body.title

My mistake before I found a solution:

  1. I was using "form-data" on Postman. (when extended: true was there)