5

これは私を夢中にさせています...私はExpress + Socket.ioの作業バージョンを持っていますが、新しいプロジェクトフォルダーにすぐに使えるNPMインストールでは再現できないようです。私が欠けているものを誰かが指摘できますか...?これが私のプロセスです:

node_modulesプロジェクト ディレクトリ ( pwd) にフォルダーを作成し、次のようにします。

npm install express
npm install socket.io

これら 2 つのコマンドを実行すると、期待どおりにパッケージがプロジェクトのnode_modulesフォルダーに配置されます。ここで、次のようにサーバーをセットアップしました。

var express = require('express'),
    server = express.createServer().use( express.static(__dirname+'./public') ).listen( 8080 ),
    io = require('socket.io').listen(server);

私のpublicフォルダーには、アプリケーションの静的アセットが含まれています。私のパブリック インデックス HTML ページには、次のスクリプト タグが含まれています。

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

最後に、サーバー スクリプトを実行し、Web ブラウザーでアプリケーションにアクセスします。私の静的公開ファイルはすべて適切に提供されていますが、/socket.io/socket.io.js. expressこれで、別の古いプロジェクトからパッケージを交換して、このシステム全体を機能させることができます。どういうわけか、そのパッケージ インスタンスの構成が異なりますが、それを再現する方法がわかりません。Express Web サイトでは、依存関係のインストールについて言及されていますが、実行npm install -dは役に立たないようです (pwd実行中に必要な特定のものはありnpm install -dますか?)。NPM を使用して新しい Express インスタンスをインストールした後、新しい Express インスタンスを構成する際に重要な何かが欠けているに違いないと思います。

あらゆる洞察に感謝します!

4

1 に答える 1

7

さて、私の例は実際には私のコードの省略形であり、その例のコードは実際に機能します。問題のある私の実際のコードは、次のようにもう少し雑然としていました。

var server = express.createServer();

server
    .use( server.router )
    .use( express.static(__dirname+'/../public') )
    .get('/api', function(req, res) {
        res.write('API');
    });

server.listen(8080);

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

次のようにして、上記のコードを修正しました。

server = server.listen(8080);

どうやら、listenコマンドはサーバー オブジェクトをいくつかの追加機能でラップします。最初に投稿した省略形の例はlisten、サーバー変数への最終的な戻り値にチェーンされているため、実際に機能します。ちょっとしたニュアンスが面白い。

于 2012-06-27T20:14:57.337 に答える