在Waterline中,如果要在查询模型时删除某些内容(例如密码),可以在其中使用delete password
toJSON方法。
如果我使用findMany
查询,则对项目使用map
和toJSON
实际上不会过滤我的数据。
如何在Waterline中获取多个项目时过滤属性?
答案 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。