最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

无法读取的未定义的属性“推”

运维笔记admin14浏览0评论

无法读取的未定义的属性“推”

无法读取的未定义的属性“推”

这是我的猫鼬的模式:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var CartSchema = new Schema({
 userID: String,
 items: [{
   itemID: String,
   quantity: Number
 }]
});

module.exports = mongoose.model('Cart', CartSchema);

下面是它采用快递Node.js的服务器。它有一个触发是否应该更新用户与req.body传递的信息车/add-to-cart路线:

router.post('/add-to-cart', function(req, res, next) {
      Cart.find({ userID: req.body.userID }).then(function(userCart){
          console.log("TEST: "+JSON.stringify(userCart));
          var myItem = {itemID: req.body.itemId, quantity: 1}
          userCart.items.push(myItem);
          res.send(userCart);
       }).catch(next);
    });

我打印到终端userCart,你可以在我的代码中看到,它返回我:

[{
  "_id":"58f7368b42987d4a46314421",  // cart id
  "userID":"58f7368a42987d4a46314420", // userid
  "__v":0,
  "items":[]   
}]

当服务器执行userCart.items.push(myItem);它返回此错误:

Cannot read property 'push' of undefined

为什么如果我已经在猫鼬定义其结构items没有定义?

回答如下:

作为adeneo正确pointed out,userCart显然是一个数组,但你需要使用的更新方法之一将文档推到项阵列,建议Model.findOneAndUpdate()

router.post('/add-to-cart', function(req, res, next) {
    Cart.findOneAndUpdate(
        { userID: req.body.userID },
        { $push: { items: { itemID: req.body.itemId, quantity: 1 } } },
        { new: true }
    )
    .exec()
    .then(function(userCart) {
        console.log("TEST: "+ JSON.stringify(userCart));
        res.send(userCart);
    })
    .catch(next);
});
发布评论

评论列表(0)

  1. 暂无评论