web-dev-qa-db-ja.com

node.js /socket.io/socket.io.jsが見つかりません

エラー/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>

何が問題ですか ???

どんな助けも歓迎です!

39
hausinho

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);

ハッピーコーディング:)

65
Amol M Kulkarni

クライアント側の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>
10
ZiTAL

この質問には一度も答えられていないようです(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'に変更します。

7
Blubberguy22

...「/socket.io/socket.io.jsファイルがどこから来たのか疑問に思うかもしれません。ファイルシステムに追加することも、ファイルシステムにも存在しないためです。これは、io.listen onによって行われる魔法の一部です。サーバー。socket.io.jsスクリプトファイルを提供するハンドラーをサーバー上に作成します。」

本「Socket.IOリアルタイムWebアプリケーション開発」、56ページから

1

これはOPとは関係ありませんが、他の人のコードを維持しながらこの問題を実行している場合、問題はアプリケーションスクリプトのio.set('resource', '/api/socket.io');設定によって引き起こされることがあります、その場合、HTMLコードは<script>type="text/javascript" src="/api/socket.io/socket.io.js"></script>

0
jcomeau_ictx

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');
});
0
Tomas Kukis