NodeJS: вернуть свойство getter экземпляра класса в res.json - PullRequest
0 голосов
/ 10 июня 2018

В моем коде ниже,

  • Я вызываю статический метод 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;

1 Ответ

0 голосов
/ 10 июня 2018

Нашел решение в JSON stringify свойство класса ES6 с помощью 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
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...