NodeJS:在res.json

时间:2018-06-10 13:33:34

标签: node.js class express

在我的下面的代码中,

  • 我正在呼叫静态" findAllPeople"我的Person类中的方法。此方法返回一组Person对象。
  • Person类还有一个fullName的getter。

问题: 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;

1 个答案:

答案 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
        }
    }