Javascript Node.js:无法在localhost上获取json对象

Javascript Node.js:无法在localhost上获取json对象,javascript,android,json,node.js,express,Javascript,Android,Json,Node.js,Express,我有一个android应用程序,它将向我的服务器发送一个json,在那里我将有一个node.js express应用程序。同时,我想在本地主机上测试它 在我的android代码中,我将json发送到: new HttpAsyncTask().execute("http://10.0.2.2:8080/ReceiveJson"); 此代码由按钮触发,工作正常 然后在我的app.js文件中,我有以下代码: var express = require('express') , http = r

我有一个android应用程序,它将向我的服务器发送一个json,在那里我将有一个node.js express应用程序。同时,我想在本地主机上测试它

在我的android代码中,我将json发送到:

   new HttpAsyncTask().execute("http://10.0.2.2:8080/ReceiveJson");
此代码由按钮触发,工作正常

然后在我的app.js文件中,我有以下代码:

var express = require('express')
, http = require('http');
var app = express();
app.set('port', process.env.PORT || 8080);
app.get('/ReceiveJson', function(req, res) {

console.log(req.body);
res.send(req.body);
res.json(req.body);
res.send("ok");
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
在我的终端中,我运行node app.js,得到的答案是“Express server正在侦听端口8080”。没有别的了

当我进入浏览器并将

http://localhost:8080/ReceiveJson
我得到的答案是“{}”。 在我的终端,我得到了同样的答案

我必须做什么才能接收json?
谢谢

这是因为您使用req.body进行响应:

 res.send(req.body);
下面的代码永远不会被调用,因为您已经响应:

res.json(req.body);
res.send("ok");
因为您使用的是web浏览器,所以主体中没有发送任何内容,因为它是get请求,并且主体中没有get请求的内容,因此您会得到一个空的json对象,因此{}

如果您将代码更改为:

app.get('/ReceiveJson', function(req, res) {
    res.send("ok");
});
然后,当您在浏览器中浏览时,您将得到“ok”的响应

如果您希望在express服务器上发布或放置,则需要使用app.post或app.put。我注意到您正在尝试为您已经编写的应用程序使用Android设备发送JSON。我强烈建议使用Fiddler或其他测试工具,只要确保向express应用程序发送JSON时使用的是标题:

Content-Type: application/json
编辑:

您的JSON可能无法工作,因为您没有使用主体解析器。在应用程序之前,请尝试将其插入您的代码中

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

你好它现在正在工作,我在终端上得到的结果是正常的。但我仍然收到带有代码console.log(req.body)的空json。在客户端(android),我发现json发送得非常完美。我仍然不确定出了什么问题。谢谢你的帮助投票并打分正确吗?我添加了一些代码来帮助您处理身体jsonNow我面临另一个问题:我创建了一个变量:var globalId=0;然后,我将这个globalId转换为1,并在控制台中显示为1。在我创建client.set(“id”,globalId)之后。当我执行client.get(“id”,function(err,res{console.log(res);})时,我得到的值是0,而不是1,作为之前转换和调试过的值。为什么我不能从一个局部变量中设置一个值,该局部变量在进入redis之前在代码内部更改过?