未处理的承诺拒绝警告 - 无法存储到数据库中

时间:2018-02-26 07:42:41

标签: javascript node.js database mongodb promise

来自req的数据存储在Comment集合中,但它不存储在Product集合中,我将收到错误消息

app.post("/products/:id/comments", function(req, res) {
//lookup campground using ID
Product.findById(req.params.id, function(err, product) {
    if (err) {
        console.log(err);
        res.redirect("/products");
    } else {
        Comment.create(req.body.comment, function(err, comment) {
            if (err) {
                console.log(err);
            } else {
                console.log("aaaaaa");
                product.comments.push(comment);
                console.log("bbbbbb");
                product.save();
                console.log("cccccc");
                res.redirect('/products/' + product._id);
            }
        });
    }
});});

以下是产品

var mongoose = require("mongoose"),
productSchema = new mongoose.Schema({
name: String,
img: String,
price: Number,
desc: String,
comments: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Comment"
}],
created: {
    type: Date,
    default: Date.now()
}});module.exports = mongoose.model("Product", productSchema);

这是评论模式

var mongoose = require("mongoose"),
commentSchema = mongoose.Schema({
    text: String,
    author: String
});module.exports = mongoose.model("Comment", commentSchema);

我得到了以下输出: -

enter image description here

所以它存储在commentSchema中,但它不存储在product.comments中,当我运行也重定向到products /:id的网站时,我缺少将注释存储到数据库中的内容?

1 个答案:

答案 0 :(得分:0)

如果您没有将回调函数传递给 save(),那么它将返回一个承诺。

因此,您收到错误,因为您没有添加 catch

尝试将回调传递给 save()

// ...

product.save(function(err, result) {
  if (err) {
    // Handle error
  }
  console.log("cccccc");
  res.redirect('/products/' + product._id);
})