http status

This commit is contained in:
Sergey Yarkov 2020-01-17 23:04:06 +03:00
parent 83a176543d
commit d482f0bf43
8 changed files with 167 additions and 119 deletions

View File

@ -9,37 +9,52 @@ 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 {
const items = await db.collection('items').find({}).toArray(),
info = await db.collection('info').find({}).toArray(),
sortBy = req.query.sorting;
try {
const items = await db.collection('items').find({}).toArray(),
info = await db.collection('info').find({}).toArray(),
sortBy = req.query.sorting;
if (items.length > 0) {
// устанавливаем count для каждого товара.
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));
break;
case 'descending':
res.json(items.sort((a, b) => b.price - a.price));
break;
case 'newer':
res.json(items.sort((a, b) => b.date - a.date));
break;
case 'older':
res.json(items.sort((a, b) => a.date - b.date));
break;
default:
res.json(items);
break;
}
} else res.send({error: 'Товаров в магазине пока что нет.'});
if (items.length > 0) {
// устанавливаем count для каждого товара.
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));
break;
case 'descending':
res.json(items.sort((a, b) => b.price - a.price));
break;
case 'newer':
res.json(items.sort((a, b) => b.date - a.date));
break;
case 'older':
res.json(items.sort((a, b) => a.date - b.date));
break;
default:
res.json(items);
break;
}
} 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,48 +101,68 @@ 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(),
sortBy = req.query.sorting;
try {
const items = await db.collection('items').find({
category: req.params.category
}).toArray(),
sortBy = req.query.sorting;
if (items.length > 0) {
switch (sortBy) {
case 'ascending':
res.json(items.sort((a, b) => a.price - b.price));
break;
case 'descending':
res.json(items.sort((a, b) => b.price - a.price));
break;
case 'newer':
res.json(items.sort((a, b) => b.date - a.date));
break;
case 'older':
res.json(items.sort((a, b) => a.date - b.date));
break;
default:
res.json(items);
break;
}
} else res.send({error: 'Товаров в магазине пока что нет.'});
if (items.length > 0) {
switch (sortBy) {
case 'ascending':
res.json(items.sort((a, b) => a.price - b.price));
break;
case 'descending':
res.json(items.sort((a, b) => b.price - a.price));
break;
case 'newer':
res.json(items.sort((a, b) => b.date - a.date));
break;
case 'older':
res.json(items.sort((a, b) => a.date - b.date));
break;
default:
res.json(items);
break;
}
} else res.send({
error: 'Товаров в магазине пока что нет.'
});
} catch {
res.status(500).render('main/404');
}
});
server.get('/api/categories', async (req, res) => {
const categories = await db.collection('categories').find({}).toArray();
categories.length > 0 ? res.send(categories) : res.send({error: 'Категорий в магазине пока что нет.'})
try {
const categories = await db.collection('categories').find({}).toArray();
categories.length > 0 ? res.json(categories) : res.send({error: 'Категорий в магазине пока что нет.'});
} catch {
res.status(500).render('main/404');
}
});
server.get('/api/category/:category', async (req, res) => {
const category = await db.collection('categories').find({title: req.params.category}).toArray();
category.length > 0 ? res.send(category) : res.send({error: 'Такой категории не существует.'});
try {
const category = await db.collection('categories').find({title: req.params.category}).toArray();
category.length > 0 ? res.json(category) : res.send({error: 'Такой категории не существует.'});
} catch {
res.status(500).render('main/404');
}
});
server.get('/api/icons', checkAuthenticated, (req, res) => {
const icons = fs.readdirSync('dist/public/img/service-icons');
res.json(icons);
try {
const icons = fs.readdirSync('dist/public/img/service-icons');
res.json(icons);
} catch {
res.status(500).render('main/404');
}
});
}

View File

@ -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');
}
})
}

View File

@ -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');
});
});
}

View File

@ -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');
}
});
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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
View 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="/") Вернуться на главную.