【发布时间】:2014-05-28 09:10:13
【问题描述】:
在 Waterline 中,当您想在查询模型时删除模型中的某些内容(比如密码),您可以在其 toJSON 方法中使用 delete password。
如果我使用findMany 查询,则对项目使用map 和toJSON 实际上不会过滤我的数据。
Waterline获取多个item时如何过滤属性?
【问题讨论】:
在 Waterline 中,当您想在查询模型时删除模型中的某些内容(比如密码),您可以在其 toJSON 方法中使用 delete password。
如果我使用findMany 查询,则对项目使用map 和toJSON 实际上不会过滤我的数据。
Waterline获取多个item时如何过滤属性?
【问题讨论】:
在 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),你必须使用上面的逻辑,而不是将错误或奇怪的东西存储到数据库中。
【讨论】: