7

私は次の状況に直面しています。ソフトウェア開発をさらにモジュール化するために、いくつかの標準モジュールをスタンドアロンで作成しました。たとえば、Express と Passport に基づくログイン モジュールを考えてみてください。これにより、ユーザーはあらゆる種類のソーシャル サービスにログインできるようになります。このモジュールには、ユーザー管理、ログイン、登録、プロファイルなどの UI も含まれています。

今、私がやろうとしているのは、Auth アプリ フォルダー (Express アプリ、ルート、ビュー、モデル、設定、依存関係のすべてを含む) を別の Express アプリ (たとえば、CMS) にドロップしてからロードすることです。のようなものでそれrequire('./lib/auth/app.js')。これが可能であることはわかっています。Kueを見てください。

どうすればこれを行うことができますか?また、名前空間の問題をどのように管理すればよいでしょうか? /auth/もちろん、各ルートに追加することもできますが、設定( app.use()'s)とパブリックフォルダーが「親」app.jsの設定とパブリックフォルダーと競合することを想像できます。

前もって感謝します、

ファビアン

4

1 に答える 1

6

私は自分の答えを見つけたと思います。それで、私はこの質問これを見つけました。私の用語がオフだったと思います。

私はいくつかのことをすることで私の問題を解決しました。まず、すべてのルートと URL を「名前空間」に変更しました (そうではありませんが、これでうまくいきます)。すべてのルートは現在/auth/、それらの前にあります。すべてのリンクに同じことをしたので、すべてうまくいきました。

次に、app.js からサーバー部分を削除しました。したがって、代わりに:

require('http').createServer(app).listen(app.get('port'));

私はただします:

module.exports = app;

そして、いくつかのカスタム メソッドをアプリ オブジェクトに追加します。

app.isLoggedIn = auth.isLoggedIn;
app.notLoggedIn = auth.notLoggedIn;

次に、ルート アプリで次の手順を実行してauthアプリを読み込みます。ルーティング、パブリック ファイル、その他すべての処理が魔法のように行われます。かなりクール。

var auth = require('./vendor/auth/app');
var app  = express();

app.configure(function() {
    app.use(auth); // use our auth app

    // do a lot of root-app related stuff...
});

まだやるべきこと:

私のauthアプリはいくつかのセッションのものを使用しています。2 番目のリンクによると、正しく理解できればapp.use(session...)、アプリ内のものはauthによってオーバーライドされapp.useます。また、URL を生成するために EJS ヘルパーを定義したいと考えています (そのようなsite_url('/facebook/callback')ものは を指し/auth/facebook/callbackます)。最後に、ルート アプリの設定を含める必要があります。app.js(in )全体authを関数にラップして、構成オブジェクトを渡すことを考えています。このような:

module.exports = function(config) {
    var app = express();

    app.set('config', config);
    // various app settings, routes, etc

    // return app so it's available in my root.
    return app;

}

もう少し情報が必要な場合は、コードを要点に投稿できるかどうかを確認します。私に知らせて!

于 2012-09-12T09:23:51.650 に答える