Как установить / получить данные экспресс-сессии, используя модернизацию - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь добавить товары в свою корзину, которая хранится в экспресс-сессии из приложения для Android, используя модификацию. Но количество тележек остается прежним. Как установить заголовок для доступа к экспресс-сессии?

Я занимаюсь разработкой приложения для электронной коммерции с использованием Nodejs для бэкэнда и храню корзину в экспресс-сессии. Что касается клиента (приложения Android), я использую модификацию для получения данных API. Элементы были успешно добавлены, когда я тестировал маршрут с помощью почтальона. Но когда я пытаюсь использовать дооснащение и настраивать элементы через это, количество всегда равно 1. Я считаю, что причина в том, что сессия не устанавливается.

Я не считаю необходимым создавать новое хранилище данных на клиенте: поскольку данные сеанса хранятся на стороне сервера. Но идентификатор экспресс-сессии хранится в куки, и, если я прав, куки хранятся на стороне клиента. Если это неправильный подход, что бы вы предложили? и если это не так, в чем моя ошибка?

модель корзины - cart.js

module.exports = function Cart(oldCrart) {
  this.items = oldCrart.items || {}; //if oldcart is not diggined use empity as default
  this.totalQty = oldCrart.totalQty || 0;
  this.totalPrice = oldCrart.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 += storedItem.item.price * 1; //*1 is there to treat the variable as intiger
  };
  this.generateArray = function() {
    var arr = [];
    for (var id in this.items) {
      arr.push(this.items[id]);
    }
    return arr;
  };
};

ProductDetails.java

  compositeDisposable.add(ClientApi.addToCart(Productid, "session Id")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        new Consumer<Cart>() {
                            @Override
                            public void accept(Cart cart) throws Exception {
                                Toast.makeText(SingleProduct.this, "Product added to cart"), Toast.LENGTH_SHORT).show();

                            }

                        }, new Consumer<Throwable>() {
                            @Override
                            public void accept(Throwable throwable) throws Exception {
                                Toast.makeText(SingleProduct.this,throwable.getMessage() , Toast.LENGTH_SHORT).show();

                            }
                        }));
    }

Клиент API

    @GET("/mobile-api/add-to-cart/{id}")
    Observable<Cart> addToCart(@Path("id")String pid, @Header("cookie.connect.sid") String sid);

addToCart route

//serverside 
router.get("/mobile-api/add-to-cart/:id", function(req, res) {
  var productId = req.params.id;
  var cart = new Cart(req.session.cart ? req.session.cart : {}); //pass the cart if it exist or empity if it doesnt
  console.log("cart", cart);
  Product.findById(productId, function(err, product) {
    if (err) {
      console.log(err);
    }
    cart.add(product, product.id);
    const totalQty = (req.session.cart = cart);

    var Mycart = new Cart(req.session.cart);
    const cartData = {
      products: Mycart.generateArray(),
      totalPrice: Mycart.totalPrice
    };
     console.log(cart);//LOG THE CART
    res.json(cartData);
  });
});

Я добавлял один и тот же продукт четыре раза, используя приложение почтальон и приложение для Android Почтальон вернулся

cart Cart {
  items: 
   { '5c871fa5a9f2e1fc0ec63eaa': { item: [Object], qty: 4, price: 18220 } },
  totalQty: 4,
  totalPrice: 18220

на консоль, но приложение для Android вернулось

cart Cart {
  items: 
   { '5c871fa5a9f2e1fc0ec63eaa': 
      { item: { manufacture: [ { _id: 5c871fa5a9f2e1fc0ec63eab, manufacturer: 'toothless' } ],

  stokeamount: 3,
  image: 'some-image.jpg',
  price: '4555',
  pname: 'Wood crafted phone case',
  _id: 5c871fa5a9f2e1fc0ec63eaa },
        qty: 1,
        price: 4555 } },
  totalQty: 1,//TOTAL QUANTITY IS ALWAYS THE SAME
  totalPrice: 4555

totalQty и qty всегда 1

...