无法在 Xcode 中连接到本地服务器

Posted

技术标签:

【中文标题】无法在 Xcode 中连接到本地服务器【英文标题】:Could Not Connect to Local Server in Xcode 【发布时间】:2016-04-21 06:11:37 【问题描述】:

尝试从 Xcode 连接到本地服务器。我已经将一个 Alamofire Pod 导入到我的 Xcode 项目中并在 xcode 中运行以下命令

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

ios 设备上运行时,我在 Xcode 中收到以下错误。

 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);

 );

);

【问题讨论】:

尝试制作一个普通的GET 并发布正在获取的内容 你的 Alamofire.request 中有 https 但你实际运行的是 http 刚刚更改为 http,仍然出现相同的错误。不完全确定@VictorSigler 是什么意思 另外我的 Alamofire.frameworkFoundation.frameworkPods.Framework 是红色的,但项目仍在构建中,我仍然能够将 Alamofire 导入到我的 swift 文件中 @cnichs27 "Cannot GET /" 在浏览器中意味着您的 node.js 应用程序不处理 GET 请求 - 您可以添加 GET 处理程序并重新检查它是否在浏览器中有效。关于错误本身,请检查this 是否有帮助 - 如果您在设备上运行它,那么它实际上无法访问“localhost:3000”,请在模拟器中尝试。 【参考方案1】:

以下是来自 cmets 的讨论摘要:

1) 最初,node.js 应用程序只有POST 请求的路由。这使得调试更加复杂。为GET 请求添加路由,以便您可以在浏览器中查看http://localhost:3000。现在检查它是否在桌面浏览器和模拟器浏览器中工作,以确认通用节点应用程序可用性。

2) 像 http://localhost:3000http://127.0.0.1:3000 这样的地址只能在运行 node.js 应用程序的同一台机器上工作。这包括 iOS 模拟器,但不适用于设备上的此类地址。

3) 在设备上进行测试 - 将 localhost 地址替换为您的本地网络 IP 地址。本地网络地址通常看起来像192.168.xxx.xxx,可以在网络设置中找到。

要在生产环境中实际运行此设置,您将需要一个运行 node.js 应用程序的服务器,该服务器具有公共真实 IP 地址或域名,并且您将使用 http://my.app.domain.or.ip:3000 之类的名称连接到它。

【讨论】:

以上是关于无法在 Xcode 中连接到本地服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法在浏览器中连接到 django 服务器

无法在新的自定义类 Xcode 11 中连接到 IBOutlet

如何在 Flutter 应用程序中连接到本地实时数据库模拟器?

在 play 框架中连接到本地 h2 数据库

如何在 VB.net 中连接到本地网络上的 Access 数据库?

尝试在我的本地主机中连接到我的数据库,但不断收到错误消息