function indexRoute(req, res, dbo) { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const array = Object.keys(result[0].items) const categories = array.map(cat => { return cat[0].toUpperCase() + cat.slice(1); }); res.render('index', { pageName: 'index', categories }); }) } function getItemsRoute(req, res, dbo) { if (req.query.auth === 'yYNfW8ynVO18L1TW5qIkILM1WtWgrVZz') { if (req.query.option === 'all' && !req.query.sorting) { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; res.send(result[0].items); }) } else if (!req.query.option && req.query.category && req.query.sorting === 'ascending') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items[req.query.category]; items.sort((a, b) => a.price - b.price) // фильтр по возрастанию по цене res.send(items); }); } else if (!req.query.option && req.query.category && req.query.sorting === 'descending') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items[req.query.category]; items.sort((a, b) => b.price - a.price) // фильтр по убыванию по цене res.send(items); }); } else if (!req.query.option && req.query.category && req.query.sorting === 'older') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items[req.query.category]; items.sort((a, b) => new Date(a.date) - new Date(b.date)); // фильтр по возрастанию по дате res.send(items); }); } else if (!req.query.option && req.query.category && req.query.sorting === 'newer') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items[req.query.category]; items.sort((a, b) => new Date(b.date) - new Date(a.date)) // фильтр по убыванию по дате res.send(items); }); } else if (!req.query.option && req.query.category) { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const query = result[0].items[req.query.category] if (query != undefined) { res.send(query); } else { res.send('Товары в этой категории не найдены или такой категории нет') } }) } else if (req.query.option && req.query.sorting === 'ascending') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items; Object.values(items).forEach(arr => arr.sort((a, b) => a.price - b.price)) // фильтр по возрастанию по цене res.send(items); }); } else if (req.query.option && req.query.sorting === 'descending') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items; Object.values(items).forEach(arr => arr.sort((a, b) => b.price - a.price)) // фильтр по убыванию по цене res.send(items); }) } else if (req.query.option && req.query.sorting === 'older') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items; Object.values(items).forEach(arr => arr.sort((a, b) => new Date(a.date) - new Date(b.date))) // фильтр по возрастанию пр дате res.send(items); }); } else if (req.query.option && req.query.sorting === 'newer') { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items; Object.values(items).forEach(arr => arr.sort((a, b) => new Date(b.date) - new Date(a.date))) // фильтр по возрастанию пр дате res.send(items); }); } else { res.send('Запрос неверный'); } } else { res.send('Неверный токен'); } } function onePageItemRoute(req, res, dbo) { dbo.collection('storeInfo').find().toArray((err, result) => { if (err) throw err; const items = result[0].items; const keys = Object.keys(result[0].items); let itemFind = false; keys.forEach(key => { items[key].forEach(item => { if (item._id != undefined) { if (item._id == req.params.id) { itemFind = true; res.render('product', { title: item.title, image: item.image, count: item.count, category: item.category[0].toUpperCase() + item.category.slice(1), price: item.price, description: item.description, date: item.date }); } } }) }); if (!itemFind) res.send('Error 404'); }) } function howToBuyRoute(req, res) { res.render('how-to-buy', { pageName: 'how-to-buy' }); } function contactsRoute(req, res) { res.render('contacts', { pageName: 'contacts' }); } function commentsRoute(req, res) { res.render('comments', { pageName: 'comments' }); } function myOrdersRoute(req, res) { res.render('my-orders', { pageName: 'my-orders' }); } module.exports = function (server, db) { server.get('/', (req, res) => indexRoute(req, res, db)); server.get('/store-api', (req, res) => getItemsRoute(req, res, db)); server.get('/how-to-buy', (req, res) => howToBuyRoute(req, res, db)); server.get('/contacts', (req, res) => contactsRoute(req, res, db)); server.get('/comments', (req, res) => commentsRoute(req, res, db)); server.get('/my-orders', (req, res) => myOrdersRoute(req, res, db)); server.get('/product/:id', (req, res) => onePageItemRoute(req, res, db)); }