【问题标题】:Cordova adding port to external links on cordova run browser科尔多瓦在科尔多瓦运行浏览器上向外部链接添加端口
【发布时间】:2016-05-20 17:48:52
【问题描述】:

我正在使用 node.js、socket.io 和 cordova 构建一个测试聊天应用程序客户端。 执行cordova run browser 浏览器打开http://localhost:8000。 在我的科尔多瓦聊天客户端应用程序的 index.js 中,我得到了连接到服务器端 socket.io 的代码:

var socket = io.connect('https://node-socket.io-address/');
socket.on('connect', function() {.............

问题是我收到这种错误:

如您所见,链接中添加了一个端口 (8000)。当我在 android 设备上运行应用程序(cordova run android)时,不会出现此问题。

为什么 cordova 向外部链接添加端口? 可以在 cordova 运行浏览器上禁用向外部链接添加端口

【问题讨论】:

  • 您是否在 index.html 中正确配置了 CSP(Content-Security-Policy)?
  • 实际上我完全删除了它,因为它导致了另一个错误(拒绝连接到资源),但事实并非如此;)。为什么有一个端口添加到放置在 Javascript 中的链接 - 将端口添加到 url 地址的末尾是不正确的
  • 您可以简单地添加默认 https 端口:var socket = io.connect('https://node-socket.io-address:433/');(或其他端口,如果不同)
  • 你的配置是什么样的?例如app.set('port', process.env.PORT || 8000); process.env.PORT 由您运行代码的环境设置。
  • @stdob-- 是的,我知道这一点 - 但我必须知道我的 heroku 测试服务器正在使用哪个端口(它不是 443,因为 chrome 开发控制台中存在连接超时错误)跨度>

标签: javascript node.js cordova socket.io localhost


【解决方案1】:

不是cordova向你的URL添加端口,而是socket.io客户端here

  this.port = opts.port || (global.location && location.port ?
       location.port :
       (this.secure ? 443 : 80));

未定义端口时,默认为应用程序端口。这可能是 socket.io 中的一个错误,因为只有网页和服务器托管在同一个节点上才有意义。您的问题源于这样一个事实,即为您的应用程序提供服务的是cordova(在 localhost:8000 上),而 socket.io 假定 websocket 将在同一个端口上。

为避免这种情况,您应该将端口添加到 URL 或 options 对象。

【讨论】:

  • 这就是我最初的想法 - 将端口添加到链接,但我不知道托管在 Heroku 上的 socket.io 后端应用程序使用哪个端口 - 我试过:443(因为我的 Heroku url 已打开https)但它没有工作;)。是否有任何解决方案(可能是在线解决方案)来检查只有 URL 的端口?
  • 你应该使用 Heroku 的 HTTP 路由功能来做到这一点。
  • 嗯,我不知道如何使用它 - 但我会检查一下。有什么建议吗?不管怎样,谢谢你的回答——赏金是你的;)
猜你喜欢
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多