我正在开发一个iPhone应用程序,计划是每隔一段时间从应用程序向本地网络服务器发送一个JSON数据包。为此,我计划使用Alamofire。我的POST方法如下所示:
Alamofire.request(Alamofire.Method.POST, "http://XXX.XX.X.XX:3000/update", parameters: dictPoints, encoding: .JSON)
.responseJSON {(request, response, JSON, error) in
println(JSON)
}
IP地址已标记出来,但我已确保这对应于本地服务器的IPv4无线地址。服务器设置为侦听端口3000.服务器配置如下所示:
var express = require('express');
var app = express();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
console.log("MongoDB connection is open.");
});
// Mongoose Schema definition
var Schema = mongoose.Schema;
var LocationSchema = new Schema({
//some schema here
});
// Mongoose Model definition
var LocationsCollection = mongoose.model('locations', LocationSchema);
// URL management
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
app.get('/update', function (req, res) {
console.log("Got something from the phone!");
});
// Start the server
var server = app.listen(3000, function () {
var host = server.address().address
var port = server.address().port
console.log('App listening at %s:%s',host, port)
})
所以,这台服务器似乎工作正常。我可以在浏览器中对其进行测试并输入网址:http://127.0.0.1:3000,它会向我提供index.html文件。如果我输入http://127.0.0.1:3000/update ...那么我会得到“从电话里得到的东西!”信息。但是,当我运行我的应用程序(确保我的手机与服务器在同一个无线网络上)并且Alamofire方法被调用时......我得到的响应为零。我也没有看到“从电话里得到的东西!”信息。任何人都可以让我知道为什么会发生这种情况......或者更好的是,如何解决它?
答案 0 :(得分:5)
一些想法:
您正在Alamofire中创建POST
请求,但您已告知Express处理GET
/update
次请求。如果您想将其作为app.post(...)
处理,请使用POST
。
您的Alamofire代码正在寻找JSON响应,但您似乎没有创建JSON响应。在短期内,您可以使用responseString
而不是responseJSON
,但我认为您确实希望更改您的Web服务以使用JSON进行响应(以使应用程序更容易解析响应)。
您的Alamofire代码发送JSON请求(但很明显,当您通过Web浏览器发送请求时,它不是JSON)。您确定要发送JSON请求吗? (这不应与JSON响应问题混淆。)您是否要使用.URL
编码类型参数,而不是.JSON
?
每当您的请求在Web浏览器中正常运行,而不是从应用程序运行时,使用Charles之类的工具同时观察它们会很有用,然后您可以比较它们的不同之处并诊断它们不同行为的来源。
答案 1 :(得分:2)
如果您在同一台计算机上运行Express服务器和iOS模拟器,请尝试使用http://0.0.0.0:<port>/<url>
而不是实际IP,这在我的情况下有所帮助。
答案 2 :(得分:0)
听起来节点服务器没有绑定到您期望的地址。当您在Web浏览器中的“http://XXX.XX.X.XX:3000/update”中键入实际IP地址时,您应该验证它是否响应。您的问题详细信息表明您刚刚使用了环回地址。