NodeJS - разрешение Promise возвращает пустой объект - PullRequest
1 голос
/ 07 ноября 2019

В последнее время я переписывал свой очень простой сервер. Я пытался ввести обещания, но по какой-то причине, хотя моя база данных mongoDB содержит данные (в данном случае список категорий), когда я вызываю описанный мною ниже метод, он возвращает пустой объект json {}. Я пробовал несколько методов. До этого это был очень простой метод, который работал нормально, я пытаюсь обновить его, чтобы учесть более сложные запросы.

Кто-нибудь знает, почему я могу получить пустой объект? Он возвращает 200 OK в почтальоне, поэтому я не верю, что есть какие-либо ошибки.

Это мой класс контроллера:

'use strict';
var mongoose = require('mongoose'),
Category = mongoose.model('Categories');

module.exports = function() {
    var mod = {
       listAllCategories() {

         return new Promise(function(resolve, reject) {

           Category.find({}, function(err, category) {
              if (err) {
                return reject(err)
              } else {
                return resolve(category)
              }
            });
          }).then(([category]) => {

            if(category)
            {
              return category
            }
            else
            {
              return { success: false }
            }
          });
       }
     }
     return mod;
};

Вот как я вызываю этот метод в своем классе Routes:

  app.get('/api/gameCategories', (req, res) => {
    res.json(gameCategoryList.listAllCategories())
  })

Заранее спасибо.

1 Ответ

3 голосов
/ 07 ноября 2019

Вы вызываете res.json для объекта обещания, а не для значения, к которому он будет разрешен.

Сделайте так:

gameCategoryList.listAllCategories().then(category => res.json(category));

Есть что-то еще, что выглядит подозрительно вваш код: new Promise преобразуется в category, но в обратном вызове then вы рассматриваете его как массив (что вполне может быть правильным), но вы извлекаете из него только первый элемент массива (путем его деструктурирования). Если это не было задумано, удалите квадратные скобки из параметра [category].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...