如何在express node.js POST请求中接收JSON?

我从C#发送一个POST WebRequest和一个json对象数据。 并且想要像这样在node.js服务器中接收它:

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'); 

此外,通过以下方法调用POST webRequest的C#结尾:

 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; } } 

方法调用:

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

我如何parsing上面的node.js代码中的请求对象的JSON数据?

请求必须发送:content-type:“application / json; charset = utf-8”

否则bodyParser踢你的对象作为另一个对象的关键:)

bodyParser自动为你做,只是做console.log(req.body)

编辑 :你的代码是错误的,因为你首先包括app.router(),bodyParser之前和其他一切。 那很糟。 你甚至不应该包含app.router(),Express会自动为你做。 这里是你的代码应该是这样的:

 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'); 

你可以使用Mikeal的nice Request模块来testing这个,通过发送带有这些参数的POST请求:

 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); }); 

更新 :使用身体分析器为快递4+。