套接字连接总是失败

socket connection always failing

我正在编写一个连接到 sails 服务器的应用程序。

此应用程序是用 cordovaangularJSIonic 编写的。

当我在浏览器中启动我的应用程序时(使用 ionic serve),套接字无法连接到服务器。这是我收到的消息:

GET http://localhost:8100/socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_s…sails_io_sdk_language=javascript&EIO=3&transport=polling&t=1443472067762-4 404 (Not Found)

服务器是运行本地的1337端口,我试过把上面的URL改成:

http://localhost:1337/socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_s…sails_io_sdk_language=javascript&EIO=3&transport=polling&t=1443472067762-4

它正在运行。

在我的代码中,我在包含 sails.io.js 之后设置了 URL:

io.sails.url = 'http://localhost:1337';
io.sails.useCORSRouteToGetCookie = false;

为什么要 localhost:8100 而不是 localhost:1337

当我在我的移动设备中启动此应用程序时(将 url 设置为 http://192.168.1.10:1337)它工作正常。

sails.io.js的版本是0.11.6sails的版本是0.11.0

localhost:8100 不适用于您的移动开发环境。我遇到了同样的问题,将 localhost 更改为您工作站的 ip 解决了问题

我终于找到了解决方案(但很抱歉,我不记得是在哪里找到的:()

问题是 io.sails.url = 'http://localhost:1337'; 是在第一个 JS 循环之后执行的,因此 sails 套接字已经加载。 (这是(根据我的理解)因为在某些浏览器中,如果代码在另一个 script 标记中,它将在另一个循环中执行)

为了让它工作,我必须在包含 sails 套接字脚本之前添加以下代码:

var apiHost = 'localhost';
            (function (){
                var io;
                Object.defineProperty(window, 'io', {
                    get: function (){
                        return io;
                    },
                    set: function (value){
                        var sails;
                        io = value;
                        Object.defineProperty(io, 'sails', {
                            get: function (){
                                return sails;
                            },
                            set: function (value){
                                sails = value;
                                sails.url = 'http://'+apiHost+':1337';
                                sails.useCORSRouteToGetCookie = false;
                            }
                        });
                    }
                });
            })();