0

Sailsjs モデル属性メソッド toJSON は、モデル属性をクライアントに返す前に処理するのに非常に便利です。ただし、このメソッドはパラメーターをとらず、属性の処理に使用できる追加情報をメソッドに渡すことができません。

私の特定のケースでは、ログインしたユーザー ID (req.user.id) を比較して、属性を送信する必要があるかどうかを確認する必要があります。例えば

toJSON: function () {
  var obj = this.toObject();
  var result = {};
  if (req.user.id === 123) {  // How can I access req from inside toJSON?
    // do something here ...
  }
}

toJSON 内から req パラメータにアクセスする方法が見つかりませんでした。助言がありますか?

4

1 に答える 1

1

Sails は意図的に req 属性をグローバルとして公開しないため、toJSON 内からアクセスする方法はありません: How to access session variables outside controller

実現しようとしている機能によっては、代わりにポリシーを使用できる場合があります: Sails js ライフサイクル コールバックでリクエスト オブジェクトにアクセスする方法

同様のケースで、代わりに回避策を使用していることに気付きました。コントローラーにログインしているユーザーの ID をモデルに追加できます。

YourModel.findOne().exec(function (err, yourModelObject) {

    yourModelObject.loggedInUserId = req.user.id;
    res.send(yourModelObject);

});

その後、 toJSON メソッドでアクセスできるようになり、次のように使用できます。

toJSON: function () {
    var obj = this.toObject();
    var result = {};

    if (obj.loggedInUserId === 123) {  
     // do something here ...
    }

    delete obj.loggedInUserId;

    return obj;
}

ちょっとしたハックですが、私にとってはうまくいきました。schema: trueコードのセキュリティホールを防ぐために、ユーザーが問題のモデルに同じ値を設定できないように注意してください (たとえば、モデルで使用 するなど)。

于 2015-12-27T21:42:40.207 に答える