timateDocumentCount () возвращает объект вместо числа - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь отобразить количество документов в моей базе данных MongoDB всякий раз, когда пользователь получает домашнюю страницу моего веб-приложения. Следующая диаграмма показывает, как я хотел реализовать это: https://liveuml.com/view/5db6af5e663178088afee61e

Вот соответствующий фрагмент кода для маршрутизатора

app.route('/')
    .get(
        (req, res, next) => {
            res.locals.countOfWords = countAllWords();
            next();
        },
        (req, res, next) => {
            renderIndex(req, res);
        }
    );

И соответствующий фрагмент кода для контроллера

function countAllWords() {
    myModel.estimatedDocumentCount({}, (err, result) => {
        return result; // returns an object instead of an integer
    });
}

function renderIndex(req, res) {
    res.render('index', {
        'countOfWords' : res.locals.countOfWords
    });
}

Однако, result, который возвращает Контроллер, является объектом Query, а не целым числом. Итак, я вижу There are [object Object] documents in your database на веб-странице вместо чего-то вроде There are 12 documents in your database.

Что делает меня еще более запутанным: когда я заменяю выражение return result на console.log(result), я вижуожидаемое число в консоли.

function countAllWords() {
    myModel.estimatedDocumentCount({}, (err, result) => {
        console.log(result); // displays the number as expected
    });
}

У меня вопрос: как я могу передать номер обратно маршрутизатору вместо объекта, чтобы он мог отображаться на веб-странице?

Я использую последние версии NodeJS, ExpressJS и Mongoose.

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 октября 2019

просто используйте async await и count () в mongoose:

async countAllWords()=>{
    let countOfmymodel = await userModel.count({})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...