2016-02-10 56 views
5

我正在用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() {............. 

问题是,我收到这样那样的错误:

enter image description here

所以你可以看到有一个端口(8000)被添加到链接中。当我在Android设备上运行应用程序(cordova run android)时,此问题不会发生。

为什么科尔多瓦将端口添加到外部链接?可以禁用端口添加到cordova运行浏览器上的外部链接

+0

您是否在index.html中正确配置了CSP(内容安全策略)? – robert

+0

其实我完全删除它,因为它导致了另一个错误(拒绝连接到resorce),但它不是这种情况;)。为什么有一个端口添加到链接放置在Javascript中 - 添加端口到url的末尾addess是不正确的 – born2fr4g

+0

您可以简单地添加默认的https端口:var socket = io.connect('https:// node- socket.io-address:433 /');'(或其他端口如果不同) –

回答

3

这不是科尔多瓦添加端口到您的网址,这是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或离子对象。

+0

这就是我首先想到的 - 添加端口链接,但我不知道我的socket.io托管在Heroku上的后端应用程序使用什么端口 - 我试过:443(因为我的Heroku网址是在https上),但它没有工作;)。有没有解决方案(可能是在线解决方案)检查只有URL的端口? – born2fr4g

+0

你应该使用Heroku的HTTP路由功能来做到这一点。 – Koder

+0

嗯,我不知道如何使用它 - 但我会检查出来。有什么建议吗?无论如何谢谢你的回答 - 赏金是你的;) – born2fr4g