mirror of
https://github.com/sergeyyarkov/digital-store.git
synced 2026-10-11 10:19:15 +03:00
http status
This commit is contained in:
parent
83a176543d
commit
d482f0bf43
@ -9,9 +9,14 @@ function checkAuthenticated(req, res, next) {
|
||||
module.exports = function(server, db) {
|
||||
server.get('/api/items', async (req, res) => {
|
||||
if (req.query.q) {
|
||||
try {
|
||||
const items = await db.collection('items').find({title: {$regex: req.query.q, $options: "i"}}, {limit: 5}).toArray();
|
||||
res.json(items);
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
const items = await db.collection('items').find({}).toArray(),
|
||||
info = await db.collection('info').find({}).toArray(),
|
||||
sortBy = req.query.sorting;
|
||||
@ -19,7 +24,13 @@ module.exports = function(server, db) {
|
||||
|
||||
if (items.length > 0) {
|
||||
// устанавливаем count для каждого товара.
|
||||
info.forEach(info => db.collection('items').updateOne({"_id": ObjectID(info._id)}, {$set: {count: info.data.length}}));
|
||||
info.forEach(info => db.collection('items').updateOne({
|
||||
"_id": ObjectID(info._id)
|
||||
}, {
|
||||
$set: {
|
||||
count: info.data.length
|
||||
}
|
||||
}));
|
||||
switch (sortBy) {
|
||||
case 'ascending':
|
||||
res.json(items.sort((a, b) => a.price - b.price));
|
||||
@ -37,9 +48,13 @@ module.exports = function(server, db) {
|
||||
res.json(items);
|
||||
break;
|
||||
}
|
||||
} else res.send({error: 'Товаров в магазине пока что нет.'});
|
||||
} else res.send({
|
||||
error: 'Товаров в магазине пока что нет.'
|
||||
});
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
server.get('/api/items/page/:page', async (req, res) => {
|
||||
@ -48,8 +63,8 @@ module.exports = function(server, db) {
|
||||
limit = 5,
|
||||
items = await db.collection('items').find({}, {skip: limit * (page - 1), limit}).toArray();
|
||||
items.length > 0 && !isNaN(page) ? res.json(items) : res.json({error: 'Такой страницы не существует.'});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -57,8 +72,8 @@ module.exports = function(server, db) {
|
||||
try {
|
||||
const data = await db.collection('info').find({}).toArray();
|
||||
res.json(data);
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -66,8 +81,8 @@ module.exports = function(server, db) {
|
||||
try {
|
||||
const buyers = await db.collection('buyers').find({}).toArray();
|
||||
res.json(buyers);
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -75,8 +90,8 @@ module.exports = function(server, db) {
|
||||
try {
|
||||
const buyers = await db.collection('buyers').find({bill_id: req.params.bill_id}).toArray();
|
||||
res.json(buyers);
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -86,13 +101,16 @@ module.exports = function(server, db) {
|
||||
limit = 5,
|
||||
buyers = await db.collection('buyers').find({}, {skip: limit * (page - 1), limit}).toArray();
|
||||
buyers.length > 0 && !isNaN(page) ? res.json(buyers) : res.json({error: 'Такой страницы не существует.'});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
server.get('/api/items/:category', async (req, res) => {
|
||||
const items = await db.collection('items').find({category: req.params.category}).toArray(),
|
||||
try {
|
||||
const items = await db.collection('items').find({
|
||||
category: req.params.category
|
||||
}).toArray(),
|
||||
sortBy = req.query.sorting;
|
||||
|
||||
if (items.length > 0) {
|
||||
@ -113,21 +131,38 @@ module.exports = function(server, db) {
|
||||
res.json(items);
|
||||
break;
|
||||
}
|
||||
} else res.send({error: 'Товаров в магазине пока что нет.'});
|
||||
} else res.send({
|
||||
error: 'Товаров в магазине пока что нет.'
|
||||
});
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
server.get('/api/categories', async (req, res) => {
|
||||
try {
|
||||
const categories = await db.collection('categories').find({}).toArray();
|
||||
categories.length > 0 ? res.send(categories) : res.send({error: 'Категорий в магазине пока что нет.'})
|
||||
categories.length > 0 ? res.json(categories) : res.send({error: 'Категорий в магазине пока что нет.'});
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
server.get('/api/category/:category', async (req, res) => {
|
||||
try {
|
||||
const category = await db.collection('categories').find({title: req.params.category}).toArray();
|
||||
category.length > 0 ? res.send(category) : res.send({error: 'Такой категории не существует.'});
|
||||
category.length > 0 ? res.json(category) : res.send({error: 'Такой категории не существует.'});
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
server.get('/api/icons', checkAuthenticated, (req, res) => {
|
||||
try {
|
||||
const icons = fs.readdirSync('dist/public/img/service-icons');
|
||||
res.json(icons);
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -52,9 +52,8 @@ module.exports = function (server, db) {
|
||||
quantitySold: quantitySold(),
|
||||
count: itemsAmount()
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/control-panel/items', checkAuthenticated, async (req, res) => {
|
||||
@ -71,8 +70,8 @@ module.exports = function (server, db) {
|
||||
pageName: ['Товары', 'items'],
|
||||
count: count / 2
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/control-panel/categories', checkAuthenticated, async (req, res) => {
|
||||
@ -87,8 +86,8 @@ module.exports = function (server, db) {
|
||||
pageName: ['Категории', 'categories'],
|
||||
categoriesCount: categories.length
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/control-panel/icons', checkAuthenticated, async (req, res) => {
|
||||
@ -101,8 +100,8 @@ module.exports = function (server, db) {
|
||||
host: req.headers.host,
|
||||
pageName: ['Иконки', 'icons']
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/control-panel/content', checkAuthenticated, async (req, res) => {
|
||||
@ -116,14 +115,15 @@ module.exports = function (server, db) {
|
||||
pageName: ['Контент', 'content'],
|
||||
store: {
|
||||
title: store.title,
|
||||
email: store.email,
|
||||
info: store.info,
|
||||
infoBottom: store.infoBottom,
|
||||
howToBuy: store.howToBuy,
|
||||
contacts: store.contacts
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/control-panel/administrators', checkAuthenticated, async (req, res) => {
|
||||
@ -137,8 +137,8 @@ module.exports = function (server, db) {
|
||||
host: req.headers.host,
|
||||
pageName: ['Администраторы', 'administrators'],
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -154,7 +154,7 @@ module.exports = function (server, db) {
|
||||
db.collection('categories').insertOne(data);
|
||||
res.redirect('/control-panel/categories');
|
||||
} catch {
|
||||
res.render('main/404');
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.post('/control-panel/categories/delete', checkAuthenticated, (req, res) => {
|
||||
@ -162,9 +162,8 @@ module.exports = function (server, db) {
|
||||
const data = JSON.parse(req.body.category);
|
||||
db.collection('categories').deleteOne({"_id": ObjectID(data.id)});
|
||||
res.redirect('/control-panel/categories');
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.post('/control-panel/categories/update', checkAuthenticated, (req, res) => {
|
||||
@ -180,8 +179,8 @@ module.exports = function (server, db) {
|
||||
db.collection('categories').updateOne({"_id": ObjectID(data.id)}, {$set: {title: data.title, img: data.img, type: data.type, format: data.format}});
|
||||
db.collection('items').updateMany({"category": data.originalTitle}, {$set: {category: data.title}});
|
||||
res.redirect('/control-panel/categories');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -189,8 +188,8 @@ module.exports = function (server, db) {
|
||||
server.post('/control-panel/icons/create', checkAuthenticated, (req, res) => {
|
||||
try {
|
||||
res.redirect('/control-panel/icons');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.post('/control-panel/icons/delete', checkAuthenticated, (req, res) => {
|
||||
@ -198,8 +197,8 @@ module.exports = function (server, db) {
|
||||
try {
|
||||
fs.unlinkSync(path);
|
||||
res.redirect('/control-panel/icons');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -226,8 +225,8 @@ module.exports = function (server, db) {
|
||||
db.collection('info').insertOne(info);
|
||||
db.collection('items').insertOne(item);
|
||||
res.redirect('/control-panel/items');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.post('/control-panel/items/delete', checkAuthenticated, (req, res) => {
|
||||
@ -236,7 +235,7 @@ module.exports = function (server, db) {
|
||||
db.collection('items').deleteOne({"_id": id});
|
||||
db.collection('info').deleteOne({"_id": id});
|
||||
res.redirect('/control-panel/items');
|
||||
} catch (error) {
|
||||
} catch {
|
||||
res.render('main/404');
|
||||
}
|
||||
});
|
||||
@ -253,8 +252,8 @@ module.exports = function (server, db) {
|
||||
db.collection('items').updateOne({"_id": ObjectID(data.id)}, {$set: {title: data.title, price: data.price, description: data.description, category: data.category.title}});
|
||||
db.collection('info').updateOne({"_id": ObjectID(data.id)}, {$set: {title: data.title, data: data.info}});
|
||||
res.redirect('/control-panel/items');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -264,14 +263,15 @@ module.exports = function (server, db) {
|
||||
const data = {
|
||||
title: req.body.title,
|
||||
info: req.body.info,
|
||||
email: req.body.email,
|
||||
infoBottom: req.body.infoBottom,
|
||||
howToBuy: req.body.howToBuy,
|
||||
contacts: req.body.contacts
|
||||
}
|
||||
db.collection('content').updateOne({}, {$set: {title: data.title, info: data.info, infoBottom: data.infoBottom, howToBuy: data.howToBuy, contacts: data.contacts}});
|
||||
db.collection('content').updateOne({}, {$set: {title: data.title, email: data.email, info: data.info, infoBottom: data.infoBottom, howToBuy: data.howToBuy, contacts: data.contacts}});
|
||||
res.redirect('/control-panel/content');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
|
||||
@ -286,7 +286,7 @@ module.exports = function (server, db) {
|
||||
newPass: req.body.newPass
|
||||
}
|
||||
const admin = await db.collection('administrators').findOne({id: data.id});
|
||||
if(await bcrypt.compare(data.oldPass, admin.password)) {
|
||||
if (await bcrypt.compare(data.oldPass, admin.password)) {
|
||||
const hashedPassword = await bcrypt.hash(data.newPass, 10);
|
||||
db.collection('administrators').updateOne({id: data.id}, {$set: {name: data.name, email: data.email, password: hashedPassword}});
|
||||
req.user.name = data.name;
|
||||
@ -294,8 +294,8 @@ module.exports = function (server, db) {
|
||||
req.user.password = hashedPassword;
|
||||
res.send('Данные успешно изменены.');
|
||||
} else res.send('Неверный пароль.');
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -17,8 +17,8 @@ module.exports = function (server, db) {
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/how-to-buy', async (req, res) => {
|
||||
@ -32,8 +32,8 @@ module.exports = function (server, db) {
|
||||
howToBuy: store.howToBuy
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
res.send('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/contacts', async (req, res) => {
|
||||
@ -47,8 +47,8 @@ module.exports = function (server, db) {
|
||||
contacts: store.contacts
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
res.send('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/comments', async (req, res) => {
|
||||
@ -61,8 +61,8 @@ module.exports = function (server, db) {
|
||||
title: store.title
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/my-orders', async (req, res) => {
|
||||
@ -75,8 +75,8 @@ module.exports = function (server, db) {
|
||||
title: store.title
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
res.render('main/404');
|
||||
} catch {
|
||||
res.status(500).render('main/404');
|
||||
}
|
||||
});
|
||||
server.get('/product/:id', async (req, res) => {
|
||||
@ -118,7 +118,7 @@ module.exports = function (server, db) {
|
||||
});
|
||||
}))
|
||||
.catch(() => {
|
||||
res.render('main/404');
|
||||
res.status(500).render('main/404');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -2,8 +2,9 @@ const ObjectID = require('mongodb').ObjectID;
|
||||
const nodemailer = require('../nodemailer.config');
|
||||
|
||||
module.exports = function(server, db, qiwiApi) {
|
||||
server.get('/success', (req, res) => {
|
||||
const query = req.query;
|
||||
server.get('/success', async (req, res) => {
|
||||
const store = await db.collection('content').findOne({}),
|
||||
query = req.query;
|
||||
|
||||
// qiwi
|
||||
if (query.bill_id && query.item_id && query.payment === 'qiwi') {
|
||||
@ -53,12 +54,11 @@ module.exports = function(server, db, qiwiApi) {
|
||||
res.send('Время жизни счета истекло. Счет не оплачен');
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
res.render('main/404');
|
||||
.catch(() => {
|
||||
res.render('main/failure', {email: store.email});
|
||||
});
|
||||
} else {
|
||||
res.render('main/404');
|
||||
res.status(404).render('main/404');
|
||||
}
|
||||
});
|
||||
}
|
||||
2
dist/public/js/admin.js
vendored
2
dist/public/js/admin.js
vendored
File diff suppressed because one or more lines are too long
2
dist/public/js/main.js
vendored
2
dist/public/js/main.js
vendored
File diff suppressed because one or more lines are too long
3
dist/views/admin/content.pug
vendored
3
dist/views/admin/content.pug
vendored
@ -17,6 +17,9 @@ body.has-fixed-sidenav
|
||||
.input-field.col.s12
|
||||
input(id="title" type="text" name="title" value=store.title)
|
||||
label(for="title") Название магазина
|
||||
.input-field.col.s12
|
||||
input(id="email" type="email" name="email" value=store.email)
|
||||
label(for="email") Почта службы поддержки
|
||||
.input-field.col.s12
|
||||
textarea(id="contacts" class="materialize-textarea" type="text" name="contacts") #{store.contacts}
|
||||
label(for="contacts") Контакты магазина
|
||||
|
||||
10
dist/views/main/failure.pug
vendored
Normal file
10
dist/views/main/failure.pug
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
//- Head HTML
|
||||
include ./assets/head.pug
|
||||
|
||||
main.main-section
|
||||
.container
|
||||
.row
|
||||
.col.s12
|
||||
h1(style="margin-top: 2rem;font-size:70px;margin-bottom:2rem;") Произошла непредвиденная ошибка.
|
||||
p Напишите в службу поддержки по адресу #{email}
|
||||
a(href="/") Вернуться на главную.
|
||||
Loading…
x
Reference in New Issue
Block a user