1

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

此应用程序是用和编写cordova的。angularJSIonic

当我在浏览器中启动我的应用程序(使用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)时,它工作正常。

is的版​​本和sails.io.jsis0.11.6的版​​本sails0.11.0

4

2 回答 2

1

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

于 2015-09-30T01:14:23.927 回答
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;
                            }
                        });
                    }
                });
            })();
于 2015-10-04T16:32:38.543 回答