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?
To post JSON to a REST API endpoint, you must send an HTTP POST request to the REST API server and provide JSON data in the body of the POST message. You also need to specify the data type in the body of the POST message using the Content-Type: application/json request header.
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+.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With