0

私は、mongodbコレクションに接続するときに「モデル」を使用するためのinitメソッドを使用して、node.jsの優れた単純なパターンを整理しようとしています。基本的に、各コレクションには「モデル」があります。

これが私が持っているもので、シングルトンとして設定されていますが、このメソッドを使用しない理由はありますか、それともノードのコンテキスト内でより推奨されるメソッドがありますか?

module.exports = User;

function User () {

  if ( arguments.callee.instance ) {
    return arguments.callee.instance;
  } else {
    arguments.callee.instance = this;
  }

  //Init our database collection

}

User.findOne = function (user_id) {

}

User.addUser = function () {

}

return new User();

ありがとうございました!

4

1 に答える 1

1

ええと、User.prototype.methodを置く必要があります。

User.prototype.findOne = function (user_id) {

}

User.prototype.addUser = function () {

}

'return new User()'の代わりに、おそらく、

module.exports = new User();

'new' User()をエクスポートしない理由の1つは、nodejsプログラムで複数のユーザーを作成する場合です。ユーザーが1人だけの場合は、シングルトンで問題ありません。また、このモジュールにデータを渡したい場合は、コンストラクター引数を使用して渡すことができます。モジュールでユーザーを作成するだけの場合は、アプリのコンストラクターに渡すことはできません。

module.exportsを関数に割り当てるパターンを使用します。すべてのエクスポートの最初の引数は、すべてのエクスポート間で共有されるオブジェクトであるため、イベント/リスナーを追加し、さまざまな方法で相互に通信できます。

たとえば(「events」と「app」は疑似であり、実際のAPIに基づくものではありません)、

function doLogin(app) {
    return function (e) {
        // some code to do login
    }
}
module.exports = function login (app) {
    app.events.on('login', doLogin(app));
}

これで、他のすべてのモジュールが経由でログインをトリガーできます

app.events.login({'user': '..','pass': '..'});
于 2013-03-23T18:34:32.613 に答える