Не удается прочитать свойство 'параметра ID' - PullRequest
0 голосов
/ 30 сентября 2019

Это мой код маршрутизатора, куда я импортировал свою модель 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 throw er;// Необработанное событие '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 \ rout \ rout.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) Произошло событие «ошибка» в: в 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 (внутренний / process / next_tick.js: 61:11) Сбой приложения [nodemon] - ожидание изменений файла перед запуском ...

См. Мой полный код по адресу: https://github.com/ma-9/E_com_NodeJS.git

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

mongooes db хранит данные с уникальным идентификатором. И ключ _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('/');
})  
})
0 голосов
/ 30 сентября 2019

Здравствуйте, я вижу ваш код, и я думаю, что вы допустили ошибку в файле 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

0 голосов
/ 30 сентября 2019

я вижу ваш код, в этой строке Product.findById(productID,(err,product)=>{ вы вызываете функцию findById из product модуля. но я вижу в этом файле только

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

...