Sails JS:将参数传递给toJSON

时间:2015-11-20 22:34:52

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

sailsjs模型属性方法toJSON在发送回客户端之前处理模型属性非常方便。但是,此方法不接受任何参数,我无法将其他信息传递给可用于处理属性的方法。

在我的特定情况下,我需要检查是否应该通过比较登录的用户ID(req.user.id)来发送属性。 E.g。

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

1 个答案:

答案 0 :(得分: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),以防止代码中存在安全漏洞。