2015-05-07 51 views
1

我正在为Android创建离子应用程序,它将通过套接字与简单的Node.js服务器进行通信。为此我使用socket.io。我也在客户端使用Angular.js。文件未找到socket.io ionic

我一直在努力让连接工作大约一个星期。我不想在这里添加,我绝不是专家,甚至不习惯JavaScript。我一直在清除问题和错误,但是这一个错误让我崩溃了。

无法加载资源:服务器与404(未找到)状态 http://EXTERNAL_IP:3000/socket.io/?EIO=3&transport=polling&t=1431009277925-0

对我来说,这似乎是客户端试图从服务器获取socket.io文件回应,但该文件在服务器上不存在。我有socket.io.js在客户端的文件结构本地文件和HTML链接它像这样:

<script src="js/vendor/socket-io.js"></script> 

我在控制台收到此错误都当我经由实时重载服务器运行,当应用程序部署到我的银河S5运行android 5.0

我已经尝试了很多来自本网站和其他人的建议,但无济于事。也许有我的硬件设置,不想玩的很好?

我一直在关注这个教程: http://www.htmlxprs.com/post/6/creating-a-realtime-image-sharing-app-with-ionic-and-socketio-tutorial

但是,代码拒绝正常工作。

server.js

var server = require('http').createServer(); 
var io = require('socket.io')(server); 

io.sockets.on('connection', function(socket){ 
    console.log("Socket connected"); 

    socket.on('disconnect', function(){ 
    console.log("Socket disconnected"); 
    }); 

    socket.on('echo', function(msg){ 
    console.log("Recieved msg: " + msg); 
    socket.emit('echo', msg); 
    }) 

}); 

server.listen(3000); 

services.js

angular.module('MyApp.services', []).factory('socketio', function($rootScope) { 
    var socket = io.connect("http://EXTERNAL_IP:3000"); 
    return { 
    on: function (eventName, callback) { 
     socket.on(eventName, function() { 
     var args = arguments; 
     $rootScope.$apply(function() { 
      callback.apply(socket, args); 
     }); 
     }); 
    }, 
    emit: function (eventName, data, callback) { 
     socket.emit(eventName, data, function() { 
     var args = arguments; 
     $rootScope.$apply(function() { 
      if (callback) { 
      callback.apply(socket, args); 
      } 
     }); 
     }) 
    } 
    }; 
}); 

controllers.js

angular.module("MyApp.controllers", []) 
.controller("SocketCtrl", ["$scope", 'socketio', function($scope, socketio){ 
    console.log("attempting to connect"); 
    socketio.on("connect", function(){ 
    console.log("Connected"); 
    }); 
    socketio.on("echo", function(msg){ 
    console.log("Received msg: " + msg); 
    }); 
}]); 

如果任何人有任何指针,我会非常感激。

+0

有同样的问题,兄弟..看看这个 [你需要使用白名单科尔多瓦插件] [ 1] [1]:http:// stackoverflow。com/questions/30132885/ionic-app-can-connect-cors-enabled-server-with-http – Anmol

回答

0

我有这个问题通过this tutorial工作时,和科尔多瓦-插件白名单解决它:

cordova plugin add cordova-plugin-whitelist 

这略高于<title> index.html中:

<meta http-equiv="Content-Security-Policy" content="default-src 'unsafe-eval' 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; connect-src http://my-server-name.com"> 

connect-src是关键。它“限制了起源,你可以连接(通过XHR,WebSockets的,而EventSource的”,根据this article

+0

我有这个问题,但不是使用''标签,而是包含'在Android的'config.xml'中(如[docs](https://github.com/apache/cordova-plugin-whitelist)中的状态) –