Чтобы реализовать функциональность добавления товара в корзину для незарегистрированных пользователей с использованием Node.js, можно использовать сессии для хранения состояния корзины на сервере или в памяти браузера (например, в `localStorage` или `sessionStorage`). Вот несколько способов реализации:
### 1. Использование сессий
Вы можете использовать такие библиотеки, как `express-session` для управления сессиями пользователей. Это позволит вам сохранять данные корзины для незарегистрированных пользователей на сервере.
#### Пример:
**Установка зависимостей:**
```bash
npm install express express-session
```
**Настройка сервера:**
```javascript
const express = require('express');
const session = require('express-session');
const app = express();
const PORT = 3000;
app.use(express.json());
app.use(session({
secret: 'your_secret_key', // Секретный ключ для подписи ID сессии
resave: false,
saveUninitialized: true,
cookie: { maxAge: 1000 * 60 * 60 } // Время жизни сессии в миллисекундах
}));
// Маршрут для добавления товара в корзину
app.post('/add-to-cart', (req, res) => {
const productId = req.body.productId;
const quantity = req.body.quantity || 1;
if (!req.session.cart) {
req.session.cart = {};
}
// Если товар уже в корзине, увеличиваем его количество
if (req.session.cart[productId]) {
req.session.cart[productId] += quantity;
} else {
req.session.cart[productId] = quantity;
}
res.json({ cart: req.session.cart });
});
// Маршрут для получения содержимого корзины
app.get('/cart', (req, res) => {
res.json({ cart: req.session.cart || {} });
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
```
### 2. Использование Local Storage на стороне клиента
Если вы хотите избежать проблем с сессиями и хранить данные корзины на стороне клиента, можно использовать `localStorage`. Это позволит сохранять товары в корзине даже при перезагрузке страницы.
#### Пример:
**Клиентская часть:**
```javascript
function addToCart(productId, quantity) {
let cart = JSON.parse(localStorage.getItem('cart')) || {};
if (cart[productId]) {
cart[productId] += quantity;
} else {
cart[productId] = quantity;
}
localStorage.setItem('cart', JSON.stringify(cart));
}
// Получение корзины при загрузке страницы
window.onload = function() {
let cart = JSON.parse(localStorage.getItem('cart')) || {};
console.log('Cart contents:', cart);
};
```
### 3. Комбинированный подход
Вы можете использовать сессии для хранения корзины в памяти сервера и при этом периодически синхронизировать корзину с localStorage клиента. Это позволит улучшить устойчивость к сбоям (например, потеря сессии на сервере).
### Итоги
- Если вам нужно, чтобы данные сохранялись даже после перезагрузки страницы, вы можете использовать localStorage.
- Если вы хотите управлять состоянием корзины на сервере, используйте сессии.
- Вы также можете объединить оба подхода, создавая более гибкую и устойчивую систему для управления корзиной.