在许多结果上使用toJSON

时间:2014-05-28 09:10:14

标签: sails.js waterline

在Waterline中,如果要在查询模型时删除某些内容(例如密码),可以在其中使用delete password toJSON方法。

如果我使用findMany查询,则对项目使用maptoJSON实际上不会过滤我的数据。

如何在Waterline中获取多个项目时过滤属性?

1 个答案:

答案 0 :(得分:0)

在Sails.js中获取多个项目就像单个项目一样。

意味着您只需继续并覆盖模型中的toJSON()方法,然后调用类似" find()"的函数。在控制器内部,sails服务器应该迭代地调用toJSON()方法。

您应该记住的一件事是,toJSON方法必须嵌入"属性"模型的对象,否则,它永远不会工作。请参阅以下代码:



module.exports = {

  attributes: {
    username: 'string',
    password: 'string',
    type: 'string',
    firstName: 'string',
    lastName: 'string',
    fullName: function() {
     return this.firstName + " " + this.lastName;
    },
    mobile: 'string',
    avatar: 'string',
    Unit: {model: 'unit'},
    // Override the default toJSON method
    toJSON: function() {
      var obj = this.toObject();
      delete obj.password;
      if (typeof this.fullName === 'function')
            obj.fullName = this.fullName();
      return obj;
    }
  }
};




关于toJSON()的另一件事 - 它在两种方式下使用(在更新期间向前和向后),所以如果你有一个计算字段(如:fullName = firstName + lastName),你必须使用上面的逻辑,而不是将错误或奇怪的东西存入DB。