是否可以在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
?
答案 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'))
}
}
})