我正在编写一个连接到sails
服务器的应用程序。
此应用程序使用cordova
,angularJS
和Ionic
编写。
当我在浏览器中启动应用程序时(使用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.6
,sails
的版本为0.11.0
答案 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;
}
});
}
});
})();