В моем коде ниже,
- Я вызываю статический метод findAllPeople в моем классе Person.Этот метод возвращает набор объектов Person.
- В классе Person также есть метод получения fullName.
Проблема: res.json(Array.from(people))
возвращает массивобъекты Person, но без свойства fullName.Когда я отлаживаю Array.from(people)
в VS Code, он правильно возвращает массив объектов Person со свойством fullName.Но когда я оцениваю JSON.stringify(Array.from(people))
, я получаю строку без свойства getter.
Я уже пытался использовать [...people]
вместо Array.from(people)
.Но результат тот же.Таким образом, именно действие stringify вызывает эту проблему (я полагаю ...).
Как создать ответ, который возвращает массив со свойством fullName (на основе метода получения fullName)?
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;