2016-01-15 2 views
4

Попытка подключения к локальному серверу с Xcode. Я импортировал Alamofire стручок в моем Xcode проект и выполнить следующую команду в XcodeНе удалось подключиться к локальному серверу в Xcode

Alamofire.request(.GET, "http://localhost:3000" , parameters: ["code": "123"]).responseJSON { 
       response in 
       print ("Hello", response) 
      } 

Я получаю следующее сообщение об ошибке в Xcode при работе на IOS устройства.

FAILURE: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={NSUnderlyingError=0x13d84f7f0 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo={_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}}, NSErrorFailingURLStringKey=http://localhost:3000/, NSErrorFailingURLKey=http://localhost:3000/, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.} 

Я знаю, что обслуживает местонахождение. Когда я вызвать следующую функцию в командной строке:

$ node index.js 
Running at http://localhost:3000 

В браузере следующее показано:

Cannot GET/

Мой .js файл состоит в следующем:

var buffer = require('buffer'); 
var bodyParser = require('body-parser'); 
var crypto = require('crypto'); 
var express = require('express'); 
var request = require('request'); 
var url = require('url'); 
var app = express(); 

var config = { 
    clientId: '', 
    clientSecret: '', 
    callbackUrl: '', 
    encryptionSecret: '', 
    endpoint: 'https://accounts.spotify.com', 
}; 

var secretString = config.clientId + ':' + config.clientSecret; 
var authHeader = 'Basic ' + new buffer.Buffer(secretString).toString('base64'); 

// app.use(bodyParser.urlencoded({ extended: false })); // TODO - Figure out why this should be here 
app.use(bodyParser.json()); // TODO - Figure out why this should be here 

var server = app.listen(3000, function() { 
    var address = server.address(); 

    console.log('Running at http://localhost:%s', address.port); 
}); 

app.post('/swap', function(req, res) { 

    console.log(req.body); 

    if (!req.body || !req.body.hasOwnProperty('code')) { 
    console.log('Swap: missing auth code'); 
    res.status(550).send('Permission Denied'); 

    return; 
    } 

    formData = { 
    grant_type: 'authorization_code', 
    redirect_uri: config.callbackUrl, 
    code: req.body.code 
    }; 

    console.log('Swap: POST to %s', url.resolve(config.endpoint, '/api/token'), formData); 

    request.post({ 
    url: url.resolve(config.endpoint, '/api/token'), 
    headers: { 
     'Authorization': authHeader, 
     'Content-Type': 'application/x-www-form-urlencoded', 
    }, 
    form: formData, 
    }, function(error, response, body) { 

    if (error) { 
    console.log('Swap: Error - ', error); 
    res.status(500).send('Internal Server Error'); 

    return; 
    } 

    if (res.statusCode != 200) { 
    debug('Swap: response: ', response.statusCode); 
    res.status(550).send('Permission Denied'); 

    return; 
    } 

    var tokenData = JSON.parse(body); 

    console.log('Swap: tokenData - ', tokenData); 

    res.status(200).set({ 
    'Content-Type': 'application/json', 
    }).send(tokenData); 

}); 

}); 
+0

Попробуйте сделать нормальный 'GET' и опубликуйте, что получилось –

+0

У вас ** https ** в вашем Alamofire.request, но вы на самом деле работаете ** http ** – Breek

+0

только что изменилось на ** http **, все еще получая такая же ошибка. Не совсем уверен, что вы подразумеваете под этим @VictorSigler – cnichs27

ответ

10

Вот резюме обсуждения из комментариев:

1) Первоначально приложение node.js имело только маршрут fo r POST запросов. Это делает отладку более сложной. Добавьте маршрут для GET запросов, так что вы можете проверить http://localhost:3000 в браузере. Теперь проверьте, работает ли он в браузере рабочего стола и в браузере имитатора, чтобы подтвердить доступность общего узла.

2) Адрес, такой как http://localhost:3000 или http://127.0.0.1:3000, работает только на том же компьютере, на котором запущено приложение node.js. Это включает симулятор iOS, но не будет работать с таким адресом на устройстве.

3) Проверка на устройстве - замените адрес локального хоста на IP-адрес вашей локальной сети. Адрес локальной сети обычно выглядит как 192.168.xxx.xxx и может быть найден в сетевых настройках.

Чтобы запустить эту установку на производстве, вам понадобится сервер, на котором вы запустите приложение node.js, чтобы иметь общедоступный реальный IP-адрес или доменное имя, и вы подключитесь к нему, используя что-то вроде http://my.app.domain.or.ip:3000.

Смежные вопросы