Node.js 无法读取属性';标题';空的

Node.js 无法读取属性';标题';空的,node.js,mongoose,mongoose-schema,mongoose-populate,Node.js,Mongoose,Mongoose Schema,Mongoose Populate,我在做一个购物车项目,我想在购物车中添加一个产品,比如当用户登录并将随机产品添加到购物车中时,它会与他的id一起添加 这是我的购物车获取和邮寄代码 exports.getCart=(请求、回复、下一步)=>{ 请求用户 .populate('cart.items.productId')) .execPopulate() 。然后(用户=>{ console.log(用户) const products=user.cart.items; res.render(“商店/购物车”{ 路径:'/cart'

我在做一个购物车项目,我想在购物车中添加一个产品,比如当用户登录并将随机产品添加到购物车中时,它会与他的id一起添加 这是我的购物车获取和邮寄代码

exports.getCart=(请求、回复、下一步)=>{
请求用户
.populate('cart.items.productId'))
.execPopulate()
。然后(用户=>{
console.log(用户)
const products=user.cart.items;
res.render(“商店/购物车”{
路径:'/cart',
页面标题:“您的购物车”,
产品:产品
});
})
.catch(err=>console.log(err));
};
exports.postart=(请求、恢复、下一步)=>{
const prodId=req.body.productId;
Product.findById(prodId)
。然后(产品=>{
返回请求用户地址(产品);
})
。然后(结果=>{
控制台日志(结果);
res.redirect(“/cart”)
});
};
当我点击AddtoCart按钮时,代码就起作用了,我可以看到数据库中随着用户和productid一起添加到购物车中的产品数量的增加而发生的变化,但随后我得到一个错误消息

TypeError:D:\sessions\views\shop\cart.ejs:12
10|                      { %>
11 |
  • >> 12| 13 |数量: 14| 15| 无法读取null的属性“title”
  • 这是我的购物车视图ejs代码

    
    0) { %>
    
      { %>
    • 数量: 删除

    现在点菜! 购物车中没有商品!
    这是我的app.js

    app.use((请求、恢复、下一步)=>{
    User.findById('5f79f8f231e4f319009071de')
    。然后(用户=>{
    console.log(用户)
    req.user=用户;
    next();
    })
    .catch(err=>console.log(err));
    });
    猫鼬
    .连接(
    'mongodb+srv://:@cluster0.lltqs.mongodb.net/shop?retryWrites=true&w=mailty'
    )
    。然后(结果=>{
    User.findOne().then(User=>{
    如果(!用户){
    const user=新用户({
    名称:“Max”,
    电邮:'max@test.com',
    购物车:{
    项目:[]
    }
    });
    user.save();
    }
    });
    app.listen(3000);
    })
    .catch(错误=>{
    控制台日志(err);
    });
    
    有人能告诉我我做错了什么吗?我真的搞不清楚,给我一点指导会很有帮助的 编辑:以下是我的猫鼬模型和addToCart函数的样子 addtocart函数可以工作,但唯一的问题是应用程序抛出错误

    const userSchema=新模式({
    姓名:{
    类型:字符串,
    必填项:true
    },
    电邮:{
    类型:字符串,
    必填项:true
    },
    购物车:{
    项目:[
    {
    productId:{
    类型:Schema.Types.ObjectId,
    参考:“产品”,
    必填项:true
    },
    数量:{type:Number,必需:true}
    }
    ]
    }
    });
    userSchema.methods.addToCart=函数(产品){
    const cartProductIndex=this.cart.items.findIndex(cp=>{
    返回cp.productId.toString()==product.\u id.toString();
    });
    设newQuantity=1;
    const updatedCartItems=[…this.cart.items];
    如果(cartProductIndex>=0){
    newQuantity=this.cart.items[cartProductIndex]。数量+1;
    updatedCartItems[cartProductIndex]。数量=新数量;
    }否则{
    updatedCartItems.push({
    productId:product.\u id,
    数量:新数量
    });
    }
    const updatedCart={
    项目:更新的CartItems
    };
    this.cart=更新的购物车;
    返回这个.save();
    };
    
    将productId添加到p和title以及p和_id之间是错误的吗?还是其他原因呢???猫鼬模型看起来像什么?addToCart看起来像什么?@Christian将在一分钟内更新,但问题不在于代码,因为我可以将项目添加到购物车中,因为我可以看到数据库中的更改但问题是,当我决定编写一个代码来显示购物车框中的商品时,我在您的购物车中遇到了一个错误。ejs尝试只输出每个商品的p,以查看它返回的值,然后再挖掘假定的对象。我建议将模型简化一点。因为
    cart
    只有一个属性
    items
    也可以删除它,改为使用
    购物车:[{product:{type:Schema.Types.ObjectId,ref:'product',required:true},quantity:{type:Number,required:true}]
    然后在填充时:
    …user.populate('cart.product').exec()…
    .execast将productId添加到p和title以及p和_id之间是错误的吗?还是其他原因???您的猫鼬模型看起来像什么?
    addToCart
    看起来像什么?@Christian将在一分钟内更新,但问题不在于代码,因为我可以将项目添加到购物车中,因为我可以看到数据库,但问题是当我决定写一个代码来显示购物车框中的商品时,我在你的购物车中发现了一个错误。ejs尝试只输出每个商品的p,以查看它返回的值,然后再挖掘假定的对象。我建议将模型简化一点。因为
    购物车
    只有一个属性
    商品
    您也可以放弃它,而是使用
    购物车:[{product:{type:Schema.Types.ObjectId,ref:'product',required:true},quantity:{type:Number,required:true}]
    然后在