【问题标题】:UnhandledPromiseRejectionWarning in mongoose [duplicate]猫鼬中的UnhandledPromiseRejectionWarning [重复]
【发布时间】:2018-05-20 06:49:11
【问题描述】:

我有这样的类别架构:

var category_article_Schema = new Schema({
    "article_id": { type: String, required: false, unique: false },
    "category": String,
    "article": { type: mongoose.Schema.Types.ObjectId, ref: 'article'},
});

var category_article_Schema = mongoose.model('category_article_Schema', category_article_Schema);
module.exports = category_article_Schema;

文章架构:

var articleSchema = new Schema({
    "title": { type: String, required: true, unique: false },
    "details": String,
    "username": { type: String, required: true, unique: false },
    "postImageUrl": String,
    "url": String,
    "categories": [String],
    "created_at": { type: Date, default: Date.now }
});

var article = mongoose.model('article', articleSchema);
module.exports = article;

当我尝试使用填充方法获取基于类别的文章时,出现异常:UnhandledPromiseRejectionWarning: Unhandled promise rejection

function getPostByCategory(req, res, next) {
    category_article_model.find({category: req.params.name})
    .populate('article')
    .exec()
    .then(function(err, articlesByCategory) {
        if(err) throw err;
        console.log(articlesByCategory);
    })
}

首先,错误的原因可能是什么?为什么?我尝试寻找答案,但在每种情况下问题都不同。

【问题讨论】:

  • .then之后添加.catch,你没有处理异常,错误很明显。
  • 这与猫鼬无关。如果你在 Promise 上下文中抛出错误(就像你做的那样),则需要调用 catch 方法来处理它,否则错误将未处理
  • @MarcosCasagrande 我添加了 catch 但未填充文章,而是返回了类别表。有什么想法吗?
  • @MarcosCasagrande 没有错误,但没有填充文章,而是返回了类别
  • @MarcosCasagrande { _id: 5b0008ce8787890004989df2, category: 'sample category', article_id: '5b0008ce8787890004989df1', __v: 0 } ] 返回

标签: javascript node.js mongodb mongoose


【解决方案1】:

重构

function getPostByCategory(req, res, next) {
    category_article_model.find({category: req.params.name})
    .populate('article')
    .exec()
    .then(function(err, articlesByCategory) {
       if(err) throw err;
       console.log(articlesByCategory);
    })
}

到这里

function getPostByCategory(req, res, next) {
    category_article_model.find({category: req.params.name})
   .populate('article')
   .exec()
   .then(function(articlesByCategory) {
      console.log(articlesByCategory);
   })
   .catch(function (err){
      throw err; // or handle it
   })
}

【讨论】:

  • 我添加了catch,但没有填充文章,而是返回了类别表。有什么想法吗?
  • @Satyadev 该类别中可以有超过 1 篇文章吗?如果是这样,请尝试将其转换为架构定义中的文章数组。 articles: [{ type: mongoose.Schema.Types.ObjectId, ref: 'article'}]
  • 已将其更改为数组类型,但仍返回空数组。我在这里发布了一个新问题:stackoverflow.com/questions/50429288/…。我是 mongodb/mongoose 的新手。
猜你喜欢
  • 2018-04-17
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2018-10-09
  • 2017-05-28
  • 2023-03-14
  • 2015-04-01
相关资源
最近更新 更多