提问者:小点点

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


这是我的猫鼬模式:

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);

这是使用Express的Node.js服务器。它具有/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

如果我已经在Mongoose中定义了items的结构,为什么不定义它?


共1个答案

匿名用户

正如adeneo正确指出的,UserCart显然是一个数组,但您需要使用更新方法之一将文档推送到items数组,建议使用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);
});