【问题标题】:NodeJS - Promise resolve returns empty objectNodeJS - 承诺解析返回空对象
【发布时间】:2020-03-03 10:34:51
【问题描述】:

我最近一直在重写我非常简单的服务器。我一直在尝试引入承诺,但由于某种原因,即使我的 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())
  })

提前谢谢你。

【问题讨论】:

    标签: node.js json mongodb server promise


    【解决方案1】:

    您在 promise 对象上调用 res.json,而不是它要解析的值。

    所以这样做:

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

    您的代码中还有一些看起来可疑的东西:new Promise 解析为 category,但在 then 回调中,您将其视为一个数组(这很可能是正确的),但您只提取它的第一个数组元素(通过解构它)。如果这不是故意的,则从 [category] 参数中删除方括号。

    【讨论】:

    • 太棒了!太感谢了。这是一种享受,一旦它允许我接受,我会接受它作为答案。关于为什么它只返回第一个类别而不是所有类别的任何想法?我假设这可能与我在解决方案中返回它的方式有关?
    • 没关系,我是对的......它应该只是类别而不是[类别]。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2017-05-18
    • 2017-07-18
    • 2018-06-10
    • 2023-03-11
    相关资源
    最近更新 更多