我WebRequest从C#发送一个POST 以及一个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');
Run Code Online (Sandbox Code Playgroud)
此外,WebRequest通过以下方法调用POST的C#end :
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;
}
}
Run Code Online (Sandbox Code Playgroud)
方法调用:
TestPOSTWebRequest("http://localhost:3000/ReceiveJSON", new TestJSONType {a = 2, b = 3});
Run Code Online (Sandbox Code Playgroud)
如何从上面的Node.js代码中的请求对象解析JSON数据?
Art*_*hle 31
请求必须与:content-type:"application/json; charset = utf-8"一起发送
否则bodyParser会将您的对象踢为另一个对象中的键:)
ale*_*lex 22
bodyParser会自动为您完成,只需这样做 console.log(req.body)
编辑:您的代码错误,因为您首先在bodyParser和其他所有内容之前包含app.router().那很糟.您甚至不应该包含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');
Run Code Online (Sandbox Code Playgroud)
您可以使用Mikeal的好的Request模块测试这个,通过发送带有这些参数的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);
});
Run Code Online (Sandbox Code Playgroud)
更新:使用body-parser for express 4+.