我試圖學習node.js和socket.io。無法連接到來自通過不同服務器或文件系統提供的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
以及處理套接字連接,並且它看起來像sockets.io在服務器上的socket.io
目錄下創建一個socket.io
js文件。所有這一切都很好。
現在,我工作的一個cordova應用程序,我沒有從服務器服務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
但是,當我使用的是僅適用科爾多瓦構建應用程序,正確的..?我只是用[括號](http://brackets.io/)來運行它。由括號啓動的'node.js'服務器是否考慮了cordova插件..? –
這是客戶端錯誤 - 不是服務器端錯誤。 – Harangue