在我的下面的代码中,
问题:
res.json(Array.from(people))
返回Person对象的数组,但没有fullName属性。
当我在VS Code中调试Array.from(people)
时,它正确返回具有fullName属性的Person对象数组。但是当我评估JSON.stringify(Array.from(people))
时,我得到一个没有getter属性的String。
我已尝试使用[...people]
代替Array.from(people)
。但结果相同。
所以它是导致这个问题的stringify动作(我假设......)。
如何创建一个返回带有fullName属性的数组的响应(基于fullName getter)?
controller.js
const Person = require('./Person');
exports.getAll = function(req, res, next) {
Person.findAllPeople()
.then((people) => {
res.json(Array.from(people));
})
.catch((err) => {return next(err);});
}
Person.js
class Person {
constructor(personId, first, last, email, birthday) {
this._id = personId ? personId : undefined;
this.firstName = first ? first : undefined;
this.lastName = last ? last : undefined;
this.email = email ? email : undefined;
this.birthday = birthday ? new Date(birthday) : undefined;
this.relations = new Map();
}
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
static findAllPeople() {
return personRepository.getAll("ONLY_NAMES")
.then((people) => {
people.forEach((person) => {
if (person.relations.size === 0) {
person.relations = undefined;
}
})
return people;
})
.catch(console.error);
}
}
module.exports = Person;
答案 0 :(得分:0)
在JSON stringify ES6 class property with getter/setter
中找到解决方案我只需要在我的班级中添加一个toJSON方法......
toJSON() {
return {
_id: this._id,
firstName: this.firstName,
lastName: this.lastName,
fullName: this.fullName,
birthday: this.birthday,
email: this.email,
relations: this.relations
}
}