Zajmuję się tworzeniem aplikacji na iPhone'a i planuję wysłać pakiet JSON co jakiś czas z aplikacji na lokalny serwer internetowy. Aby to zrobić, planowałem użyć Alamofire. Moja metoda POST wygląda następująco:Żądanie Alamofire http do lokalnego serwera WWW
Alamofire.request(Alamofire.Method.POST, "http://XXX.XX.X.XX:3000/update", parameters: dictPoints, encoding: .JSON)
.responseJSON {(request, response, JSON, error) in
println(JSON)
}
Adres IP jest wytyczona, ale zrobiłem pewien, że ta odpowiada bezprzewodowej adres IPv4 mojego lokalnego serwera. Serwer jest ustawiony na nasłuchuje na porcie 3000. Konfiguracja serwera wygląda następująco:
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)
})
Więc ten serwer wydaje się działać ok. Mogę przetestować go w mojej przeglądarce i wpisać adres URL: http://127.0.0.1:3000, który dostarczy mi plik index.html. Jeśli wpiszę http://127.0.0.1:3000/update ... wtedy otrzymam komunikat "Mam coś z telefonu!" wiadomość. Jednak po uruchomieniu aplikacji (upewniając się, że mój telefon znajduje się w tej samej sieci bezprzewodowej co serwer), a metoda Alamofire zostaje wywołana ... odpowiedź, którą otrzymuję, jest zerowa. Nie widzę też "Masz coś z telefonu!" wiadomość. Czy ktoś może mi powiedzieć, dlaczego tak się dzieje ... lub jeszcze lepiej, jak to naprawić?
Tak. Najlepiej, że wyślę właściwą odpowiedź z powrotem, aby potwierdzić, że pakiet został poprawnie przetworzony ... Ale czy nie powinienem zobaczyć komunikatu console.log, który mówi, że otrzymał coś z telefonu? Właśnie próbuję sprawdzić, czy wiadomość, którą wysyłam z telefonu, jest nawet zarejestrowana przez telefon (po tym mogę przeanalizować wiadomość i odesłać poprawną odpowiedź). – andyopayne
Zmieniłem funkcję Alamofire, aby używać '.responseString' zamiast' .responseJSON', a komunikat, który otrzymuję, jest następujący: 'Opcjonalnie (" Can not POST/update \ n ")'.Używałem też Charlesa, kiedy to robiłem i nie widziałem żadnej aktywności wyświetlanej w dzienniku (jednak widziałem rekord, kiedy wszedłem do adresu IP w przeglądarce na moim komputerze). Czy wiesz, co oznacza odpowiedź Alamofire lub dlaczego nie będzie zamieszczać tego adresu? – andyopayne
@andyopayne Być może jest to referencja 'app.get'. Czy nie powinno to być 'app.post', jeśli chcesz obsłużyć żądania' POST' dla '/ update'? – Rob