c# - parse - request post body express




How to receive JSON in express node.js POST request? (2)

I send a POST WebRequest from C# along with a json object data. And want to receive it in a node.js server like this:

var express = require('express');
var app = express.createServer();

app.configure(function(){
  app.use(express.bodyParser());
});
app.post('/ReceiveJSON', function(req, res){
                    //Suppose I sent this data: {"a":2,"b":3}

                                //Now how to extract this data from req here?  

                                //console.log("req a:"+req.body.a);//outputs 'undefined'
                    //console.log("req body:"+req.body);//outputs '[object object]'


  res.send("ok");
});

app.listen(3000);
console.log('listening to http://localhost:3000');      

Also, the C# end of POST webRequest is invoked via the following method:

public string TestPOSTWebRequest(string url,object data)
{
    try
    {
        string reponseData = string.Empty;

        var webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
        if (webRequest != null)
        {
            webRequest.Method = "POST";
            webRequest.ServicePoint.Expect100Continue = false;
            webRequest.Timeout = 20000;


            webRequest.ContentType = "application/json; charset=utf-8";
            DataContractJsonSerializer ser = new DataContractJsonSerializer(data.GetType());
            MemoryStream ms = new MemoryStream();
            ser.WriteObject(ms, data);
            String json = Encoding.UTF8.GetString(ms.ToArray());
            StreamWriter writer = new StreamWriter(webRequest.GetRequestStream());
            writer.Write(json);
        }

        var resp = (HttpWebResponse)webRequest.GetResponse();
        Stream resStream = resp.GetResponseStream();
        StreamReader reader = new StreamReader(resStream);
        reponseData = reader.ReadToEnd();

        return reponseData;
    }
    catch (Exception x)
    {
        throw x;
    }
}

Method Invocation:

TestPOSTWebRequest("http://localhost:3000/ReceiveJSON", new TestJSONType { a = 2, b = 3 });  

How can I parse JSON data from request object in node.js code above?


The request has to be sent with: content-type: "application/json; charset=utf-8"

Otherwise the bodyParser kicks your object as a key in another object :)


bodyParser does that automatically for you, just do console.log(req.body)

Edit: Your code is wrong because you first include app.router(), before the bodyParser and everything else. That's bad. You shouldn't even include app.router(), Express does that automatically for you. Here's how you code should look like:

var express = require('express');
var app = express.createServer();

app.configure(function(){
  app.use(express.bodyParser());
});

app.post('/ReceiveJSON', function(req, res){
  console.log(req.body);
  res.send("ok");
});

app.listen(3000);
console.log('listening to http://localhost:3000');

You can test this using Mikeal's nice Request module, by sending a POST request with those params:

var request = require('request');
request.post({
  url: 'http://localhost:3000/ReceiveJSON',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    a: 1,
    b: 2,
    c: 3
  })
}, function(error, response, body){
  console.log(body);
});

Update: use body-parser for express 4+.







node.js