我想在将对象返回给客户端之前向其对象添加其他属性。 此时,当对象被序列化时,它们将从对象中省略。 有没有办法添加瞬态属性?

===============>>#1 票数:4

您可以通过首先调用序列化函数来对返回的对象进行任何更改,该序列化调用是toJSON()方法。

var jsonResult = result.toJSON();
jsonResult.newProperty = "New";

===============>>#2 票数:3

我认为将类型设置为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/

希望能帮助到你。

===============>>#3 票数:0

是的,创建实例方法应该可以满足您的需求: http : //www.sequelizejs.com/documentation#models-expansion

===============>>#4 票数: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';
            };

当然,您也可以访问实例的数据并生成虚拟获取器:

            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'

  ask by p15 translate from so

未解决问题?本站智能推荐: