Node.js: как бороться с getFullYear в мопсе - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь получить срок службы путем вычитания dateOfBirth из dateOfDeath. getFullYear () возвращает год в консоли. Но, в pug .. это выдает ошибку следующим образом: Cannot read property 'getFullYear' of undefined

Схема автора для lifeSpan:

AuthorSchema
.virtual('lifeSpan')
.get(function() {
    const lifeSpan = (this.dateOfDeath.getFullYear() - this.dateOfBirth.getFullYear()).toString();
    return lifeSpan;
});

Контроллер автора:

exports.authorList = async(req, res, next) => {
    try {
        await Author.find({}).exec((error, authorList) => {
            if(error) return authorList;

            // console.log(authorList);

            res.render('./author/index', { title: 'Author List', authorList: authorList});
        });
    } catch (error) {
        res.status(500).json({ message: error.message });
    }
};

Индекс. мопс:

ul
    each author in authorList
      li 
        a(href=author.url) #{author.name}
        |  (#{author.lifeSpan})

    else
      li There is No Author in The List.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 27 октября 2019

Кажется, что PUG переопределяет «this», и хотя метод получения виртуального поля вызывается во время выполнения, «this» ссылается на что-то еще.

Так что в качестве решения попробуйте это, добавьте PUGфункция как:

- function getLifeSpan(author){ return author.lifeSpan; }

, так что ваш файл мопса выглядит так:

- function getLifeSpan(author){ return author.lifeSpan; }
ul
    each author in authorList
      li 
        a(href=author.url) #{author.name}
        |  (#{getLifeSpan(author)})

    else
      li There is No Author in The List.
...