Функция Javascript не выполняется и не возвращает массив

1

Cart.js

var Cart = function Cart(oldCart) {
this.items =  oldCart.items || [];


this.add = function (item) {
    this.items.push(item);
    }
}

Мой маршрут index.js

 router.post('/cart', (function (req, res) {
    var productid = req.body.id
    var myCart = new Cart(req.session.cart ? req.session.cart :{})

    //query the db and return the correct object
    Products.findById({ _id: productid }, function (err, product) {
        //if there is an error...
        if (err) {
            return res.redirect('/');
        }

        myCart.add(product);
        req.session.cart = myCart;
        console.log(req.session.cart);
        res.redirect('/');

    });

}));

В конце вашего примера кода вы включили этот код, который я предполагаю, что это код для cart.js

 function Cart(oldCart = {}) {
  this.items = oldCart.items || [];
  this.add = function (item) {
    this.items.push(item)
  }
}

но это дает мне ошибку с (oldCart = {}) в качестве параметра. поэтому я удалил это. Теперь я получаю один элемент, добавленный в корзину покупок, каждый раз, когда я нажимаю на элемент. Он не включает элементы, которые были нажаты ранее.

Вот консоль.log, обратите внимание, что "Strawberry" находится в моем первом запросе, а затем меня перенаправили на индексную страницу и нажали на "Apple", предполагается, что он будет накапливать продукт во втором запросе, чтобы показать корзину: [' Strawberry ',' Apple ']

Изображение 174551

Когда я запускаю свой код, где я добавляю Product2 и Product2 в корзину покупок, вот как он отображает корзину покупок, которая является правильной, потому что она показывает два элемента в корзине покупок, что является нормальным поведением.

Изображение 174551

Я благодарю вас за ваше время и приношу извинения за то,

Нужно ли использовать цикл for для перехода через объект myCart, чтобы отображать все элементы там вместо того, что я добавил последним?

  • 0
    потому что в вашем cart.js файле cart.add является function
  • 0
    Я передал product и product.name в функцию в index.js. Разве не предполагается, что this.items и generateArray добавят это в массив?
Показать ещё 6 комментариев
Теги:
express

1 ответ

1
Лучший ответ

Поскольку вы объяснили мне, что именно вы пытаетесь выполнить, я помогу вам сделать это самым простым способом.

Мы начнем с повторного форматирования вашего кода. Свойством items в настоящее время является объект {} но мы будем использовать массив [].

'this.items = oldCart.items || []'

Поскольку items теперь представляют собой массив, мы будем push на него новые элементы, используя созданный вами метод add. Я изменил это на это:

this.add = function(item){
   this.items.push(item);
  }

И это все, что вам нужно. Теперь в вашем коде после получения продукта для базы данных добавьте его в cart.items а затем передайте его на свой сеанс:

Products.findById({ _id: productid }, function (err, product) {
  if (err) {
    return res.redirect('/');
  }
  //add the product to cart.items
  cart.add(product)
  //pass cart.items to the session
  req.session.cart = cart.items;
  req.session.save(function (err) {
    return
  });

//instantiate new cart object
const myCart = new Cart;
const product1 = {id:1, name:'orange', price:1};
const product2 = {id:2, name:'apple', price:2};
//add products
myCart.add(product1);
myCart.add(product2);
//you can see the added products
console.log(myCart.items)

function Cart(oldCart = {}) {
  this.items = oldCart.items || [];
  this.add = function (item) {
	this.items.push(item)
  }
}
  • 0
    Я обновил свой код и вопрос выше. Пожалуйста, прочитайте. Большое спасибо, что нашли время, чтобы помочь. Это было очень полезно. Я думаю, что мне нужно использовать цикл for для добавления всех товаров, добавленных в ITEMS в корзину, чтобы решить проблему с отображением одного товара в сеансе корзины? Правильно?
  • 0
    @marco, тебе нужно создать экземпляр класса только один раз. Попробуйте создать его за пределами Products.findBy...
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню