エラー/socket.io/socket.io.js 404(Not Found)Uncaught ReferenceError:io is not definedが表示される
私のコードは
var express = require('express'), http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(3000);
そして
<script src="/socket.io/socket.io.js"></script>
何が問題ですか ???
どんな助けも歓迎です!
socket.io.js
をパブリックフォルダー(resources/js/socket.io.js
など)にコピーするのは適切な方法ではありません。
Socket.io
サーバーがHTTP
サーバーを適切にリッスンする場合、http://localhost:<port>/socket.io/socket.io.js
を介してクライアントファイルを自動的に提供します。それを見つけるか、パブリックにアクセス可能なフォルダーにコピーする必要はありません。 resources/js/socket.io.js
&手動で提供します。
コードサンプル
Express 3.x -Express 3では、http.Server
を最初にアタッチするためにsocket.io
をインスタンス化する必要があります
var express = require('express')
, http = require('http');
//make sure you keep this order
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
//...
server.listen(8000);
ハッピーコーディング:)
クライアント側のsocket.io.jsを見つける方法
socket.ioをインストールする
npm install socket.io
socket.ioクライアントを見つける
find ./ | grep client | grep socket.io.js
結果:
./node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
socket.io.jsをリソースにコピーします。
cp ./node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js /home/proyects/example/resources/js/
あなたのhtmlで:
<script type="text/javascript" src="resources/js/socket.io.js"></script>
この質問には一度も答えられていないようです(OPには遅すぎるかもしれませんが、将来この問題に出くわして問題を解決する必要がある人には答えます)。
npm install socket.io
を実行する代わりに、npm install socket.io --save
を実行する必要があるため、socket.ioモジュールがWeb開発フォルダーにインストールされます(このコマンドは、index.htmlまたはindex.phpが存在するベースの場所で実行します) 。これにより、socket.ioがグローバルではなくコマンドが実行される領域にインストールされ、さらに、package.jsonファイルが自動的に修正/更新されるため、node.jsがそこにあることがわかります。
次に、ソースパスを'/socket.io/socket.io.js'
から'http://' + location.hostname + ':3000/socket.io/socket.io.js'
に変更します。
...「/socket.io/socket.io.jsファイルがどこから来たのか疑問に思うかもしれません。ファイルシステムに追加することも、ファイルシステムにも存在しないためです。これは、io.listen onによって行われる魔法の一部です。サーバー。socket.io.jsスクリプトファイルを提供するハンドラーをサーバー上に作成します。」
本「Socket.IOリアルタイムWebアプリケーション開発」、56ページから
これはOPとは関係ありませんが、他の人のコードを維持しながらこの問題を実行している場合、問題はアプリケーションスクリプトのio.set('resource', '/api/socket.io');
設定によって引き起こされることがあります、その場合、HTMLコードは<script>type="text/javascript" src="/api/socket.io/socket.io.js"></script>
。
https://socket.io/get-started/chat/ に従うだけで、すべてが機能します。
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
http.listen(3000, function(){
console.log('listening on *:3000');
});