6

以下は、express を使用した単純な node.js です。

var express = require('express');
var app = express();

app.get('/', function(req, res){
  res.send('Hello World');
});

app.listen(3000);

デフォルトでは というフォルダーがありplugins、node.js の起動時に自動的に登録されるなど、プラグインイン アーキテクチャを実装したいのですが、メインを変更する必要はありません。server.js

fooプラグインの例、例えば

PluginManager.register("init, function(app) {
    app.get('/foo', function(req, res){
        res.send('Hello from foo plugin');
    });
});

次に、私server.jsの中には、次のようなものがあります

// TODO: Scan all scripts under the folder `plugins`
// TODO: Execute all the `init` hook before the app.listen
app.listen(3000);

私の問題は、プラグイン コードがすべて非同期であることです。 の前にブロックする方法がありapp.listen()ません。より良いプラグイン アーキテクチャの実装について何か考えはありますか?

ありがとう。

4

2 に答える 2

3

プラグインをロードしているものは何でも、他のものと同じようにコールバックを発生させるようです。

PluginManager.loadPlugins(function() { app.listen(3000); });

この方法では、プラグインがすべて読み込まれるまで、アプリはリッスンを開始しません。

于 2012-08-10T05:13:25.927 に答える
1

ブロックする必要があります。これは、アプリケーションの「開始時間」にのみ影響し、「実行時間」には影響しません。

  • ディレクトリfs.readdirSync内のすべてのファイルを取得するために使用しますplugins
  • それらをモジュールとして記述し、require()それらすべて(require同期)
  • それらをあなたのServer
于 2012-08-10T13:00:51.170 に答える