科尔多瓦在科尔多瓦运行浏览器上向外部链接添加端口
Posted
技术标签:
【中文标题】科尔多瓦在科尔多瓦运行浏览器上向外部链接添加端口【英文标题】: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 开发控制台中存在连接超时错误)跨度>
【参考方案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 或 opt
ions 对象。
【讨论】:
这就是我最初的想法 - 将端口添加到链接,但我不知道托管在 Heroku 上的 socket.io 后端应用程序使用哪个端口 - 我试过:443(因为我的 Heroku url 已打开https)但它没有工作;)。是否有任何解决方案(可能是在线解决方案)来检查只有 URL 的端口? 你应该使用 Heroku 的 HTTP 路由功能来做到这一点。 嗯,我不知道如何使用它 - 但我会检查一下。有什么建议吗?不管怎样,谢谢你的回答——赏金是你的;)以上是关于科尔多瓦在科尔多瓦运行浏览器上向外部链接添加端口的主要内容,如果未能解决你的问题,请参考以下文章