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

时间:2014-02-10 23:12:28

标签: javascript android json node.js express

我有一个Android应用程序,它将发送一个json到我的服务器,我将有一个node.js表达应用程序。同时,我想在我的localhost上测试它。

在我的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'));
});

在我的终端中,我运行节点app.js,我得到的答案是“Express服务器正在侦听端口8080”。没别了。

当我进入浏览器并输入

http://localhost:8080/ReceiveJson

我得到“{}”作为答案。 在我的终端,我得到了相同的答案。

接收json需要做什么? 感谢

1 个答案:

答案 0 :(得分:0)

那是因为你正在回复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");
});

然后当您在浏览器中浏览时,您将收到“确定”的响应

如果您要发布或发送到快速服务器,则需要使用app.post或app.put。我注意到您正在尝试使用Android设备为您已编写的应用程序发送JSON。我强烈建议使用Fiddler或其他东西进行测试,只需确保当您将JSON发送到Express应用程序时使用标题:

Content-Type: application/json

编辑:

您的JSON可能无法正常工作,因为您没有使用正文解析器。尝试在app.listen

之前在代码中插入此内容
app.configure(function(){
    app.use(express.bodyParser());
})