【问题标题】:Hide some properties in JSON response object in sails.js在sails.js中隐藏JSON响应对象中的一些属性
【发布时间】:2016-05-20 13:11:10
【问题描述】:

我对sails.js 框架非常陌生。我想在响应 JSON 对象被查询时隐藏一些特定字段。

例如,我有一个模型对象用户:

User: {
  name: 'Paul',
  email: 'paul@gmail.com',
  token: 'sdffsdf',
  id: 1
}

如果这个用户被 GET 请求查询,我想隐藏“token”属性:localhost:1337/user?id=1

有人可以给我一个提示吗?

【问题讨论】:

  • 在您的 http 请求的标头中传递您的令牌。

标签: json node.js sails.js


【解决方案1】:

覆盖模型的toJSON() 函数。这也可以用来隐藏其他敏感数据。

module.exports = {
    attributes: {
        name: 'string',
        email: 'email',
        token: 'string',
        toJSON: function() {
            var obj = this.toObject();
            delete obj.token;
            return obj;
        }
    }
}

【讨论】:

  • 这是一个解决方案,但如果您有大量高分辨率图像怎么办?这意味着,它将收集所有这些图像数据,而不是只显示名称和电子邮件属性。更好的是,只收集我们感兴趣的属性数据(即姓名和电子邮件),而不是将它们发送到输出。
  • @AndaluZ 我在一个项目中使用node-json-transform从服务器构建自定义json结果
【解决方案2】:

它曾经在sails 1.0 之前工作,因为不再支持使用实例方法。使用它会导致:

不再支持toJSON 实例方法。

您必须使用 docs

中提到的 customToJSON
customToJSON: function () {
 return _.omit(this, ['token'])
},

注意不能使用箭头函数,必须这样写。

【讨论】:

    【解决方案3】:

    如果您需要在控制器中有条件地省略某些字段,例如,您可以执行以下操作:

        self.findByRerence = async function (req, res) {
        var book = await Pot.findOne();
    
        if (req.user.id === 1) {
              book = _.omit(book, ['reference']);
            }
        res.ok(book);
        }
    

    在本例中,只有当 ID 号为 1 的用户发出此请求时,我才会删除该书的引用。

    当然,这只是为了展示如何做到这一点。

    【讨论】:

      猜你喜欢
      • 2013-11-11
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多