web-dev-qa-db-ja.com

Socket.IO-requireが定義されていません

Socket.ioを機能させようとしていますが、Chromeでエラーが発生します:

Uncaught ReferenceError:require is not defined

client.php:9Uncaught ReferenceError:ioが定義されていません

Socket.io.jsファイルが他の場所に存在しないため、含める方法を変更しました。

<script src="/node_modules/socket.io/lib/socket.io.js"></script>

やってみたら

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

次のようになります:リソースの読み込みに失敗しました:サーバーがステータス404(見つかりません)で応答しました

これはUbuntuにあり、最新のものがすべて含まれています

http://socket.io/ のサーバーコードを使用して、client.phpと同じフォルダーで作業します。これは、server.jsという名前で、変更されたポートのみで機能します。

16
Johan Svensson

スクリプトがWebサーバーからのものでない場合、これは機能しません。

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

ホストとポートを明示的に指定する必要があります。

<script src="http://localhost:<port>/socket.io/socket.io.js"></script>
31
thejh

サーバー上で node.js along PHP)を実行していますか?

serverclientの2つの「socket.io」パッケージがあります。 サーバーサーバー(/node_modules/socket.io/lib/socket.io.js)をブラウザにロードしようとしています。必要なスクリプトはsocket.io-clientと呼ばれ、 https://raw.github.com/LearnBoost/socket.io-client/master/socket)にあります。 io-client.js

何が起こるかというと、socket.ioはポート80から/socket.io/socket.io.js(クライアントのもの)ファイルを自動的に提供しますポート80でノードを実行している場合。あなたの場合、Apacheはすでにポート80にあるので、そこからファイルを手動で提供する必要があります。

16
Ricardo Tomasi

ライブラリに(/socket.io/socket.io.js)が含まれているクライアントブラウザのコーディングはおそらく問題ありませんでした。ただし、socket.io.jsの間違ったコピーを指している可能性があります。(socket.io)を使用してnpm install socket.ioをインストールした場合は、次のディレクトリでsocket.io.jsのクライアントバージョンを探してください。

C:\Program Files (x86)\nodejs\node_modules\socket.io\node_modules\socket.io-client\dist\socket.io.js

そこにある場合は、そのモジュールをWeb公開ディレクトリにコピーすることをお勧めします。OR代わりに、仮想ディレクトリが指す物理パスを変更できます。

5
Bob

私はthejhが言うことを試しました、そしてそれは働きます。ホストとポートを指定する必要がありました。ポート81でリッスンしているノードアプリの場合、クライアントJavaScriptでポート81を指定する必要がありました。 /socket.io/socket.io.jsがvhostに存在しないことを気にしないでください。ノードは、実行時にそれを補います。

1
Scott Grodberg

他の人が指摘しているように、ioがサーバー側で実行されると、「socket.io.js」の「automagical」サービスが提供され、libディレクトリ内の他のjsファイルに分岐します。

私が付け加えたいのは、これは直感的ではなく、通常のWebサーバーにこのファイルを提供させることはできないということです。エラーはさらに奇妙になり、一見矛盾しているように見えます(定義されていない必要があるなど)。これは通常のjsファイルではありません。そこにあるすべてのチュートリアルでそれを強調してほしいと思います。

とにかく、たとえばnginxの背後で実行している場合は、ポート設定をノードに割り当てられたのと同じポート(私の場合はポート3000)に設定します。私は次のようにクライアントでそのポートを使用しました:

  <script src="http://localhost:3000/socket.io/socket.io.js"></script>

...そしてサーバーコードでポート3000も使用しました-例としてserver-js-codeをコーディングできる方法/バージョンが多すぎて、「別の方法」を使用しているほとんどの人を混乱させます。

1
JosephK

同じ問題が発生し、@ thejhのソリューションが機能したことを確認しました。しかし、彼の推薦を読んだとき、私はサーバーが「何であるか」について確信が持てませんでした。ポート80でMAMPを実行しています。以下のコードは、ポート8001で実行される「node.jsサーバー」です。

Node.jsサーバーを起動したら(以下のコードを実行)、 http:// localhost:4001/socket.io/socket.io.js にアクセスするとjavascriptファイルが返されます。

_/* Node.js server */

var sys  = require('sys');
var io   = require('socket.io');
var http = require('http')
server = http.createServer(function(req, res) { 
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('http server started');
  res.end(); 
});
server.listen(4001);


// socket.io 
var socket = io.listen(server); 
socket.on('connection', function(client) {

  client.on('message', function(message) {
    // We're in!
    console.log('received client message '+ message);
  }); 
  client.on('disconnect', function() {});
  socket.send('welcome to the local node.js server!');
});
_

Drupal内のユーザーの場合、_hook_init_内のdrupal_add_js('http://localhost:4001/socket.io/socket.io.js', array('type' => 'external', 'group' => JS_LIBRARY));がトリックを実行します。

0
amateur barista

require() is not definedのようなものが表示された場合は、使用しているJavaScriptライブラリが AMD(非同期モジュール定義) の形式であることが原因である可能性があります。代わりに、 RequireJS (フル機能)または curl JSライブラリ (より小さく、より単純)を使用してSocketIOをロードしてみてください。

0
a paid nerd

実際、今日、私はApacheにこれらのファイルを提供させることに成功しました。

Node_modules/socket.io/node_modules/socket.io-client/distのコンテンツのコピーをWebルートに作成するだけです(実際にファイルをコピーしました。ソフトリンクは試していませんでした)。 socket.ioをグローバルにインストールしたsocket.io(0.9.16)のインストールでは、次の2つのコマンドでうまくいきました。

Sudo cp -av /usr/lib/node_modules/socket.io/node_modules/socket.io-client/dist /var/www/socket.io 
chown -R www-data:www-data /var/www/socket.io

これは、node.jsを追加する前にインストールされた通常のLAMPスタックであるUbuntu13.10ボックスにありました。

新しいバージョンのsocket.ioがリリースされたときにこのコピーの同期を維持することは、私がまだ対処しようとしていない問題です。

乾杯

0
James Powell