Alamofire http请求到本地网络服务器

and*_*yne 6 ios express alamofire

我正在开发一个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)
}
Run Code Online (Sandbox Code Playgroud)

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)
})
Run Code Online (Sandbox Code Playgroud)

所以,这台服务器似乎工作正常.我可以在浏览器中测试它并输入URL:http://127.0.0.1:3000,它将为我提供index.html文件.如果我输入http://127.0.0.1:3000/update ...那么我会得到"从电话里得到的东西!" 信息.但是,当我运行我的应用程序(确保我的手机与服务器在同一个无线网络上)并且Alamofire方法被调用时......我得到的响应为零.我也没有看到"从电话里得到的东西!" 信息.任何人都可以让我知道为什么会发生这种情况......或者更好的是,如何解决这个问题?

Rob*_*Rob 5

一些想法:

  1. 您正在POSTAlamofire 中创建请求,但您已告知Express处理GET请求/update.使用app.post(...),如果你要处理它作为一个POST.

  2. 您的Alamofire代码正在寻找JSON响应,但您似乎没有创建JSON响应.在短期内,您可以使用responseString而不是responseJSON,但我认为您确实希望更改您的Web服务以使用JSON进行响应(以使应用程序更容易解析响应).

  3. 您的Alamofire代码发送JSON请求(但很明显,当您通过Web浏览器发送请求时,它不是JSON).您确定要发送JSON请求吗?(这不要与JSON响应问题混淆.)您是否想要使用.URL编码类型参数,而不是.JSON

  4. 每当您有一个从Web浏览器而不是从应用程序正常工作的请求时,使用像Charles这样的工具来观察它们是有用的,然后您可以比较它们的不同之处并诊断不同行为的来源.