如何在Node JS中向对象添加属性

时间:2019-07-16 11:24:11

标签: node.js express

是否可以在Express JS中添加自定义响应,例如添加数据库中不存在的属性?

我的控制器:

createNewPersonalData: function (req, res) {
var name = req.body.name,
    date_of_birth = req.body.date_of_birth;

var getAge = function () {
    var today = new Date();
            var dob = new Date(date_of_birth);
            var count = today.getFullYear() - dob.getFullYear();
            var m = today.getMonth() - dob.getMonth();
            if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
                count = count - 1;
            }

            return count;
        };
    PersonalInfo.create({
        name : name,
        date_of_birth : date_of_birth,
        age : getAge()
        }).then(data => {
           res.json({
                'status': 'OK',
                'messages': 'Personal Info Created',
                'data': data
            })
        });

,但是响应只是数据库表中的所有属性。没有属性/字段age

{
    "code": 200,
    "status": true,
    "data": {
        "id": 1,
        "name": "John",
        "date_of_birth": "1995-01-28T17:00:00.000Z",
    }
}

我期望的响应是:

{
    "code": 200,
    "status": true,
    "data": {
        "id": 1,
        "name": "John",
        "date_of_birth": "1995-01-28T17:00:00.000Z",
        "age": 24
    }
}

如何添加age

2 个答案:

答案 0 :(得分:1)

只需在Promise响应中使用age函数将toJSON属性添加到数据对象中,即可。

PersonalInfo.create({
    name : name,
    date_of_birth : date_of_birth,
    //age : getAge()
}).then(data => {
    var info = data.toJSON({ versionKey:false });
    info['age'] = getAge();
    res.json({
      'code':200,
      'status': 'OK',
      'messages': 'Personal Info Created',
      'data': info
    })
});

答案 1 :(得分:1)

由于您说的是使用sequelize.js,因此可以在架构上使用DataTypes.VIRTUAL。而且,您不需要在处理程序中进行年龄计算。

sequelize.define('PersonalInfo', {
  name: DataTypes.STRING,
  date_of_birth: DataTypes.DATE
  age: {
    type: DataTypes.VIRTUAL,
    get: function() {
      return getAge(this.get('date_of_birth'))
    }
  }
})