2

Node.jsとMongoDBでmongooseを使用してサーバーを作成しています。

次のようなユーザーモデルがあります。

var User = new Schema({
  username : {
    'type'      : String,
    'trim'      : true,
    'required'  : true,
    'validate': [usernameValidator, 'whitespace_not_allowed']
  },
  avatar : {
    'type'      : String,
    'lowercase' : true,
    'required'  : true
  },
  facebook_id : {
    'type'      : Number,
    'required'  : true,
    'index'     : { unique: true }
  },
  email : {
    'type'      : String,
    'lowercase' : true,
    'required'  : true
  },
  token : {
    'type'      : String,
    'index'     : { unique: true },
    'required'  : true
  }
});

クライアントがFacebookの友達全員にユーザートークンを送信したくないとリクエストした場合、これはほとんどすべてのリクエストに当てはまります。ただし、ログインなどの一部のリクエストでは、トークンを送信したいと思います。

これに伴う問題は、データベースにクエリを実行してトークンを送信するときに結果をフィルタリングし忘れると、他の情報がかなり致命的になる可能性があることです。

私が今考えている解決策は、デフォルトでどのフィールドを選択するかを指定するメソッド(まだどちらかわからない)をオーバーライドすることです。次に、さらに必要ないくつかのケースでは、クエリでそれを指定する必要があります。これにより、メモリスリップによって誤ったデータが送信されることがなくなります。

この問題をどのように解決しますか?

4

1 に答える 1

1

スキーマのフィールド定義tokenの属性を使用して、デフォルトで結果のフィールドを除外できます。select

token : {
  'type'      : String,
  'index'     : { unique: true },
  'required'  : true,
  'select'    : false
}
于 2012-08-12T19:26:46.333 に答える