【问题标题】:Sails JS: Pass parameter to toJSONSails JS:将参数传递给 toJSON
【发布时间】:2015-11-20 22:34:52
【问题描述】:

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 参数的方法。有什么建议吗?

【问题讨论】:

    标签: node.js sails.js sails-postgresql


    【解决方案1】:

    Sails 故意不将 req 属性公开为全局属性,因此无法从 toJSON 中访问它: How to access session variables outside controller

    根据您尝试实现的功能,您也许可以改用策略:How to access request object in sails js lifecycle callbacks

    在类似的情况下,我发现自己使用了一种解决方法。您可以将控制器中登录用户的 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),以防止代码中出现安全漏洞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2014-08-16
      • 2013-08-08
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多