1. ホーム
  2. javascript

[解決済み] Express 4 と express-generator の /bin/www で socket.io を使用する。

2023-02-06 22:09:12

質問

私は Express プロジェクトで socket.io を使用しようとしています。Express Js 4 が発表された後、私は express-generator を更新し、現在、アプリの初期関数は以下の場所にあります。 ./bin/www ファイルに格納され、これらのバーを含みます (WWW ファイルのコンテンツ。 http://jsfiddle.net/avMa5/ )

var server = app.listen(app.get('port'), function() {..}

(チェックは npm install -g express-generator でチェックし、次に express myApp

ということで、socket.ioのドキュメントがどのように起動するように求めているかを思い出してみましょう。

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

しかし、私は推奨されるように、app.jsの内部でそれを行うことはできません。これは、動作するために./bin/wwwで行われる必要があります。./bin/wwwで、私はそれを動作させるために何ができるかを示しています。

var io = require('socket.io')(server)

これはうまくいくのですが、io 変数を他の場所で使うことはできませんし、 socket.io の関数を www ファイルには置きたくありません。

これは基本的な構文なのでしょうが、私はこれを動作させることができません。 module.exports = server または server.exports = servermodule.exports.io = app(io) www ファイルに

そこで質問ですが、この /bin/www ファイルをアプリの開始点として持っている socket.io をどのように使えばいいのでしょうか?

どのように解決するのですか?

それは本当に基本的なsintaxの問題であることが判明した...。私は以下の行を取得しました。 このsocket.ioチャットのチュートリアル ...

を ./bin/www の直後で実行します。 var server = app.listen(.....)

var io = require('socket.io').listen(server);
require('../sockets/base')(io);

というわけで、../sockets/base.jsファイルを作成して、その中にこの小さな仲間を配置します。

module.exports = function (io) { // io stuff here... io.on('conection..... }

やったー! これで動くようになりました... ということは、私は本当に /bin/www の中で socket.io を開始する以外に選択肢がなかったのだと思います、なぜなら私の http サーバはそこで開始されたからです。 目標は、他のファイルでソケット機能を構築し、モジュール化を維持することです。 require('fileHere')(io);