套接字连接始终失败

时间:2015-09-28 20:38:23

标签: angularjs cordova ionic-framework sails.js sails.io.js

我正在编写一个连接到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之后设置了网址:

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

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

当我在移动设备中启动此应用程序(将网址设置为http://192.168.1.10:1337)时,它正常运行。

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

2 个答案:

答案 0 :(得分:1)

localhost:8100无法在移动开发环境中使用。我遇到了同样的问题,将localhost更改为工作站的ip解决了问题

答案 1 :(得分:1)

我终于找到了解决方案(但对不起,我不记得我发现它的位置:()

问题是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;
                            }
                        });
                    }
                });
            })();