javascript - 无法读取未定义的属性 'push'

标签 javascript node.js mongodb express mongoose

这是我的 Mongoose 架构:

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 路由,如果触发,它应该使用 req.body 中传递的信息更新用户的购物车:

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 的结构,为什么没有定义它?

最佳答案

adeneo正确pointed outuserCart 显然是一个数组,但您需要使用其中一种更新方法将文档推送到 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);
});

关于javascript - 无法读取未定义的属性 'push',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43493679/

相关文章:

javascript - 幻影文本 - 如何在文本框中显示微弱的文本

javascript - 如何访问 react-select HOC 的 props 和 state

javascript - 使用 JavaScript 将字符串分成多个变量

javascript - TypeScript 扩展类,行为不符合逻辑

javascript - 如何在不覆盖整个蓝图的情况下扩展 Sails.js 中蓝图的功能?

ruby - 通过 Ruby 驱动程序进行 Mongodb 全文搜索和评分

javascript - 同步执行 Sequelize 查询

node.js - io.sockets.emit 和广播有什么区别?

node.js - MongoDB 设置数据库脚本(基于 NodeJS 的项目)

java - mongodb java 使用 gson 反序列化 long