2015-11-12 51 views
2

我試圖學習無法連接到來自通過不同服務器或文件系統提供的html文件的socket.io

大多數在線的例子,包括official one要求設置在服務器端執行以下操作:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    res.sendfile('index.html'); 
}); 

io.on('connection', function(socket){ 
    console.log('a user connected'); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

,這在客戶端:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io(); 
</script> 

所以這使用相同的服務器提供index.html以及處理套接字連接,並且它看起來像在服務器上的socket.io目錄下創建一個socket.io js文件。所有這一切都很好。


現在,我工作的一個應用程序,我沒有從服務器服務index文件截至目前,因爲它會與應用程序捆綁在一起。我只需要連接到在本地計算機上運行的套接字服務器上的特定端口。

此外,我不想使用快遞,因爲我正在學習 - 我不認爲這是設置套接字服務器所必需的,我不使用它,而不理解它的作用或如何使用我的生活更輕鬆了(換句話說,我很喜歡在跳入jquery的世界之前瞭解一些關於javascript的東西......)。

於是,我就在我的server.js文件中的以下內容:

var port = 80; 
io = require('socket.io')(port); 
console.log('socket server started @ %s !', port); 

通過node server.js命令打印socket server started @ 80 !

按照documentation應該創建一個http服務器(可能是由插座增強執行此.io與真棒的東西)聽港口80

現在,如果我通過node.js服務器由括號IDE在http://127.0.0.1:56958/...path/index.html推出包含以下加載index.html

<script src="scripts/libs/socket.io/socket.io.js"></script> 
<script> 
    console.log('test'); 
    var socket = io('http://127.0.0.1:80'); 
</script> 

(其中scripts/libs/socket.io/socket.io.js是獨立sockets.io客戶端庫,我下載了形成自己github repo) 這給我留下了以下錯誤在最新版本的Chrome:

Refused to execute inline script because it violates the following Content Security Policy directive: "default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'". Either the 'unsafe-inline' keyword, a hash ('sha256-2j6JUXRmZBJXdmMDTRd3ZxygBJNrb8gSbgOi4FOjiy0='), or a nonce ('nonce-...') is required to enable inline execution. Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback. 

我也嘗試使用file:///協議從文件系統加載index.html文件,該文件引發相同的錯誤。

我在做什麼錯,我該如何解決這個問題?


注:我已經看到this的問題,但因爲我沒有使用科爾多瓦構建應用程序但我沒有cordova.xml文件。我試過啓用跨來源資源共享(,使用商店的擴展),但這也沒有幫助。


更新:

下面是目錄結構:

root 
|_app 
| | // lots of cordova directories and files like package.json 
| |_www 
| |_scripts 
| | |_libs 
| | |_socket.io 
| |  |_socket.io.js 
| |_index.html 
|_node_modules 
| |_socket.io 
|_server 
    |_server.js 

回答

1

插件科爾多瓦 - 插件白名單阻止你socket.io連接。你可以看看配置細節here。你要仔細地進行配置,而是測試你可以讓一切的目的:

<meta http-equiv="Content-Security-Policy" content="default-src *;"> 
+0

但是,當我使用的是僅適用科爾多瓦構建應用程序,正確的..?我只是用[括號](http://brackets.io/)來運行它。由括號啓動的'node.js'服務器是否考慮了cordova插件..? –

+0

這是客戶端錯誤 - 不是服務器端錯誤。 – Harangue

相關問題