NodeJSアプリケーションを構築するためのモジュールを作成したいのですが、少し失われていますが、検索に時間がかかりませんでした。 。理想的にはNodeJSモジュールの構造化 - 変数とメソッド
var newUser = new User();
、私はの上で私のモジュールを必要とするだろう:
は、私のようなものを使用して私のコードでは、新規ユーザーを作成することができ、そこから、私は「ユーザー」モジュールを作成したいと言います私のコードは次のようなものを使用しています:
var User = require('../lib/user');
これは素晴らしいです。質問は、私はどのようにユーザーモジュールを構成すべきですか?次は最善の方法ですか?
module.exports = function User() {
var authorized = false;
var username = undefined;
var password = undefined;
var statistics = undefined;
this.authorized = function() {
return authorized;
}
this.username = function() {
return username;
}
this.statistics = function() {
return statistics;
}
}
私は様々なモジュール変数のゲッターとセッターを書いているので、他のコードから誤ってアクセスしたくないものを隠すことができます。しかし、私は前にこのようにしています。
function User() {
this.authStatus = false;
this.email;
this.displayName;
this.inSession;
}
User.prototype.isAuthenticated = function() {
return(this.authStatus && this.email && this.displayName)
}
User.prototype.isInSession = function() {
return(this.inSession && this.isAuthenticated());
}
exports.User = User;
これは1つの警告でも動作します。閉鎖内からユーザープロパティにアクセスする方法が見つかりませんでした。私の理解が正しい場合、2番目の実装では、私はできません。つまり、ユーザーのプロパティを編集するコールバックとして関数をDBライブラリに渡す必要がある場合は、できません。 「この」キーワードは閉鎖ではなく、ユーザーの範囲内であるので、私の理解へのコードは動作しません
User.prototype.login = function() {
db.doDbStuff('get user data query', function(_error, _result) {
this.username = _result[0].name; //this code will not work
});
}
、:それは次のようになりたいです。コードがユーザー関数内に配置されていても、
function User() {
this.login = function() { //you know
これは機能しません。
私の質問は、この問題の最良の解決策は何ですか?それは私が最初のコードブロックで示した方法ですか?それはむしろ面倒で扱いにくく、可変の衝突になりやすいようです。怖いです。
ありがとうございます!あなたが使用
これのいずれかが意味を成さなかった場合、私は事前に謝罪、私はちょうど私の知恵歯のためのいくつかの痛みの薬を取って、私はちょっと軽いとファンキーな感じ。 –
一般的にnode.jsを使うのではなく、javascriptアーキテクチャの領域にもっと溢れ出てくるようです。 http://speakerdeck.com/u/addyosmani/p/scaling-your-javascript-applicationsとhttp://www.slideshare.net/SlexAxton/superclassy-inheritance-in-javascriptはかなり良いです。 – balupton
両方の例で変数はプライベートではないことに注意してください。あなたは見てみるべきです:http://javascript.crockford.com/private.html –