在将对象返回给客户端之前,我想向对象添加其他属性。在它们被序列化时,它们会从对象中省略。有没有办法添加瞬态属性?
问问题
2045 次
4 回答
4
您可以通过首先调用 sequlize 调用的序列化函数(即 toJSON() 方法)对返回的对象进行任何更改。
var jsonResult = result.toJSON();
jsonResult.newProperty = "New";
于 2014-10-22T13:27:37.750 回答
4
我认为将类型设置为DataTypes.VIRTUAL
可能会有所帮助。
例如
var Line = sequelize.define("Line", {
name: {
type: DataTypes.STRING(50),
allowNull: false
},
projects: {
type: DataTypes.VIRTUAL
}
});
Line.findAll().then(function (lines) {
for (var i = 0; i < lines.length; i++)
lines[i].projects = [];
console.log(JSON.stringify(lines));
});
输出
[{"name":"test1","projects":[]},{"name":"test2","projects":[]}]
文档:http ://docs.sequelizejs.com/en/latest/api/datatypes/
希望能帮助到你。
于 2015-12-16T05:34:41.010 回答
0
是的,创建实例方法应该满足您的需求:http ://www.sequelizejs.com/documentation#models-expansion
于 2013-04-16T02:16:28.493 回答
0
您可以非常轻松地添加自定义实例或类级别的方法。
const User = sequelize.define('user', { firstname: Sequelize.STRING });
// Adding a class level method
User.classLevelMethod = function() {
return 'foo';
};
// Adding an instance level method
User.prototype.instanceLevelMethod = function() {
return 'bar';
};
当然,您也可以访问实例的数据并生成虚拟 getter:
const User = sequelize.define('user', { firstname: Sequelize.STRING, lastname: Sequelize.STRING });
User.prototype.getFullname = function() {
return [this.firstname, this.lastname].join(' ');
};
// Example:
User.build({ firstname: 'foo', lastname: 'bar' }).getFullname() // 'foo bar'
于 2017-08-25T19:24:56.993 回答