无法读取 'ID parameter' 中的 属性
Cannot read property of 'ID parameter'
这是我的路由器代码,我在其中导入了我的 cart.js 模型
var router = require('express').Router();
var Product = require('../models/products');
var Cart = require('../models/cart');
router.get('/add-to-cart/:_id',(req,res,next)=>{
const productID = req.params._id;
var cart = new Cart(req.session.cart ? req.session.cart : {});
Product.findById(productID,(err,product)=>{
if(err){
res.redirect('/');
}
cart.add(product, product.id);
req.session.cart = cart;
res.redirect('/');
})
})
这是我的 Cart.js
代码
module.exports = function cart(oldCart){
this.items = oldCart.items;
this.totalQty = oldCart.totalQty;
this.totalPrice = oldCart.totalPrice;
this.add = function(item,id){
var storedItem = this.items[id]; // Here is Problem
if(!storedItem){
storedItem = this.items[id] = {item: item, qty: 0, price: 0};
}
storedItem.qty++;
storedItem.price = storedItem.item.price * storedItem.qty;
this.totalQty++;
this.totalPrice = storedItem.price;
};
this.generateArray = function(){
var array = [];
for (var id in this.items){
array.push(this.items[id]);
}
return array;
};
}
错误:
events.js:174
扔呃; // 未处理的 'error' 事件
^
TypeError: 无法读取未定义的 属性 '5d9182475f539435e81a7bb9'
在 cart.add(C:\Users\Manav\Documents\Github\E_com_App\models\cart.js:7:36)
在 Product.findById(C:\Users\Manav\Documents\Github\E_com_App\routes\routes.js:85:10)
在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\model.js:4589:16
在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:4323:12
在 process.nextTick(C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:2805:28)
在 process._tickCallback (internal/process/next_tick.js:61:11)
在以下位置发出 'error' 事件:
在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\model.js:4591:13
在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:4323:12
在 process.nextTick(C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:2805:28)
在 process._tickCallback (internal/process/next_tick.js:61:11)
[nodemon] 应用程序崩溃 - 在启动之前等待文件更改...
我看到你的代码,在这一行 Product.findById(productID,(err,product)=>{
你从 product
模块调用 findById
函数。但我只在这个文件中看到
const mongoose = require('mongoose');
const schema = mongoose.Schema;
const productSchema = new schema({
imagePath: {type: mongoose.Schema.Types.String, required:true},
// imagePath2: {type: mongoose.Schema.Types.String, required:true},
// imagePath3: {type: mongoose.Schema.Types.String, required:true},
// imagePath4: {type: mongoose.Schema.Types.String, required:true},
// imagePath5: {type: mongoose.Schema.Types.String, required:true},
name: {type: mongoose.Schema.Types.String, required:true},
desc: {type: mongoose.Schema.Types.String, required:true},
price: {type: mongoose.Schema.Types.Number, required:true},
});
module.exports = mongoose.model("DND - Products",productSchema);
您必须在本节中定义您需要的功能。例如:findById
mongooes db 以唯一 id 存储数据并且键是 _id
所以编辑它
var router = require('express').Router();
var Product = require('../models/products');
var Cart = require('../models/cart');
router.get('/add-to-cart/:_id',(req,res,next)=>{
const productID = req.params._id;
var cart = new Cart(req.session.cart ? req.session.cart : {});
Product.findById(productID,(err,product)=>{
if(err){
res.redirect('/');
}
cart.add(product, product._id);
req.session.cart = cart;
res.redirect('/');
})
})
你好,我看到了你的代码,我认为你在 Cart.js 文件和添加到购物车的路径中犯了错误。我已经解决了这个问题并向你发出了拉取请求。
更新代码
module.exports = function cart(oldCart) {
this.items = oldCart.items || {};
this.totalQty = oldCart.totalQty || 0;
this.totalPrice = oldCart.totalPrice || 0;
this.add = function (item, id) {
var storedItem = this.items[id];
if (!storedItem) {
storedItem = this.items[id] = { item: item, qty: 0, price: 0 };
}
storedItem.qty++;
storedItem.price = storedItem.item.price * storedItem.qty;
this.totalQty++;
this.totalPrice = (oldCart.totalPrice || 0) + storedItem.price;
};
this.generateArray = function () {
var array = [];
for (var id in this.items) {
array.push(this.items[id]);
}
return array;
};
并且在您调用 cart.add(product,product.id) 时在您的路线中
而不是你必须打电话给 product._id
这是我的路由器代码,我在其中导入了我的 cart.js 模型
var router = require('express').Router();
var Product = require('../models/products');
var Cart = require('../models/cart');
router.get('/add-to-cart/:_id',(req,res,next)=>{
const productID = req.params._id;
var cart = new Cart(req.session.cart ? req.session.cart : {});
Product.findById(productID,(err,product)=>{
if(err){
res.redirect('/');
}
cart.add(product, product.id);
req.session.cart = cart;
res.redirect('/');
})
})
这是我的 Cart.js
代码module.exports = function cart(oldCart){
this.items = oldCart.items;
this.totalQty = oldCart.totalQty;
this.totalPrice = oldCart.totalPrice;
this.add = function(item,id){
var storedItem = this.items[id]; // Here is Problem
if(!storedItem){
storedItem = this.items[id] = {item: item, qty: 0, price: 0};
}
storedItem.qty++;
storedItem.price = storedItem.item.price * storedItem.qty;
this.totalQty++;
this.totalPrice = storedItem.price;
};
this.generateArray = function(){
var array = [];
for (var id in this.items){
array.push(this.items[id]);
}
return array;
};
}
错误:
events.js:174 扔呃; // 未处理的 'error' 事件 ^
TypeError: 无法读取未定义的 属性 '5d9182475f539435e81a7bb9' 在 cart.add(C:\Users\Manav\Documents\Github\E_com_App\models\cart.js:7:36) 在 Product.findById(C:\Users\Manav\Documents\Github\E_com_App\routes\routes.js:85:10) 在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\model.js:4589:16 在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:4323:12 在 process.nextTick(C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:2805:28) 在 process._tickCallback (internal/process/next_tick.js:61:11) 在以下位置发出 'error' 事件: 在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\model.js:4591:13 在 C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:4323:12 在 process.nextTick(C:\Users\Manav\Documents\Github\E_com_App\node_modules\mongoose\lib\query.js:2805:28) 在 process._tickCallback (internal/process/next_tick.js:61:11) [nodemon] 应用程序崩溃 - 在启动之前等待文件更改...
我看到你的代码,在这一行 Product.findById(productID,(err,product)=>{
你从 product
模块调用 findById
函数。但我只在这个文件中看到
const mongoose = require('mongoose');
const schema = mongoose.Schema;
const productSchema = new schema({
imagePath: {type: mongoose.Schema.Types.String, required:true},
// imagePath2: {type: mongoose.Schema.Types.String, required:true},
// imagePath3: {type: mongoose.Schema.Types.String, required:true},
// imagePath4: {type: mongoose.Schema.Types.String, required:true},
// imagePath5: {type: mongoose.Schema.Types.String, required:true},
name: {type: mongoose.Schema.Types.String, required:true},
desc: {type: mongoose.Schema.Types.String, required:true},
price: {type: mongoose.Schema.Types.Number, required:true},
});
module.exports = mongoose.model("DND - Products",productSchema);
您必须在本节中定义您需要的功能。例如:findById
mongooes db 以唯一 id 存储数据并且键是 _id
所以编辑它
var router = require('express').Router();
var Product = require('../models/products');
var Cart = require('../models/cart');
router.get('/add-to-cart/:_id',(req,res,next)=>{
const productID = req.params._id;
var cart = new Cart(req.session.cart ? req.session.cart : {});
Product.findById(productID,(err,product)=>{
if(err){
res.redirect('/');
}
cart.add(product, product._id);
req.session.cart = cart;
res.redirect('/');
})
})
你好,我看到了你的代码,我认为你在 Cart.js 文件和添加到购物车的路径中犯了错误。我已经解决了这个问题并向你发出了拉取请求。
更新代码
module.exports = function cart(oldCart) {
this.items = oldCart.items || {};
this.totalQty = oldCart.totalQty || 0;
this.totalPrice = oldCart.totalPrice || 0;
this.add = function (item, id) {
var storedItem = this.items[id];
if (!storedItem) {
storedItem = this.items[id] = { item: item, qty: 0, price: 0 };
}
storedItem.qty++;
storedItem.price = storedItem.item.price * storedItem.qty;
this.totalQty++;
this.totalPrice = (oldCart.totalPrice || 0) + storedItem.price;
};
this.generateArray = function () {
var array = [];
for (var id in this.items) {
array.push(this.items[id]);
}
return array;
};
并且在您调用 cart.add(product,product.id) 时在您的路线中 而不是你必须打电话给 product._id