Cleaning up code
parent
ecef3b8224
commit
3c39b5e5c5
|
@ -17,6 +17,8 @@ Keeping expressCart running after closing the terminal can be done in a few ways
|
||||||
4. Save the PM2 config: `pm2 save`
|
4. Save the PM2 config: `pm2 save`
|
||||||
5. To start/stop: `pm2 start expressCart` / `pm2 stop expressCart`
|
5. To start/stop: `pm2 start expressCart` / `pm2 stop expressCart`
|
||||||
|
|
||||||
|
> Note: Node.js version 7.x or greater is needed.
|
||||||
|
|
||||||
## Admin
|
## Admin
|
||||||
|
|
||||||
Visit: [http://127.0.0.1:1111/admin](http://127.0.0.1:1111/admin)
|
Visit: [http://127.0.0.1:1111/admin](http://127.0.0.1:1111/admin)
|
||||||
|
|
2
app.js
2
app.js
|
@ -184,7 +184,7 @@ handlebars = handlebars.create({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// var session store
|
// session store
|
||||||
let store = new MongoStore({
|
let store = new MongoStore({
|
||||||
uri: config.databaseConnectionString,
|
uri: config.databaseConnectionString,
|
||||||
collection: 'sessions'
|
collection: 'sessions'
|
||||||
|
|
|
@ -2,12 +2,17 @@ const _ = require('lodash');
|
||||||
const uglifycss = require('uglifycss');
|
const uglifycss = require('uglifycss');
|
||||||
const colors = require('colors');
|
const colors = require('colors');
|
||||||
const lunr = require('lunr');
|
const lunr = require('lunr');
|
||||||
|
const cheerio = require('cheerio');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const glob = require('glob');
|
||||||
|
const async = require('async');
|
||||||
|
const nodemailer = require('nodemailer');
|
||||||
const escape = require('html-entities').AllHtmlEntities;
|
const escape = require('html-entities').AllHtmlEntities;
|
||||||
let ObjectId = require('mongodb').ObjectID;
|
let ObjectId = require('mongodb').ObjectID;
|
||||||
|
|
||||||
// common functions
|
// common functions
|
||||||
exports.checkLogin = function(req, res, next){
|
exports.checkLogin = (req, res, next) => {
|
||||||
// if not protecting we check for public pages and don't checkLogin
|
// if not protecting we check for public pages and don't checkLogin
|
||||||
if(req.session.needsSetup === true){
|
if(req.session.needsSetup === true){
|
||||||
res.redirect('/setup');
|
res.redirect('/setup');
|
||||||
|
@ -21,7 +26,7 @@ exports.checkLogin = function(req, res, next){
|
||||||
res.redirect('/login');
|
res.redirect('/login');
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.showCartCloseBtn = function(page){
|
exports.showCartCloseBtn = (page) => {
|
||||||
let showCartCloseButton = true;
|
let showCartCloseButton = true;
|
||||||
if(page === 'checkout' || page === 'pay'){
|
if(page === 'checkout' || page === 'pay'){
|
||||||
showCartCloseButton = false;
|
showCartCloseButton = false;
|
||||||
|
@ -31,9 +36,9 @@ exports.showCartCloseBtn = function(page){
|
||||||
};
|
};
|
||||||
|
|
||||||
// adds products to sitemap.xml
|
// adds products to sitemap.xml
|
||||||
exports.addSitemapProducts = function(req, res, cb){
|
exports.addSitemapProducts = (req, res, cb) => {
|
||||||
let db = req.app.db;
|
let db = req.app.db;
|
||||||
let async = require('async');
|
|
||||||
let config = exports.getConfig();
|
let config = exports.getConfig();
|
||||||
let hostname = config.baseUrl;
|
let hostname = config.baseUrl;
|
||||||
|
|
||||||
|
@ -59,11 +64,11 @@ exports.addSitemapProducts = function(req, res, cb){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.restrict = function(req, res, next){
|
exports.restrict = (req, res, next) => {
|
||||||
exports.checkLogin(req, res, next);
|
exports.checkLogin(req, res, next);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.clearSessionValue = function(session, sessionVar){
|
exports.clearSessionValue = (session, sessionVar) => {
|
||||||
let temp;
|
let temp;
|
||||||
if(session){
|
if(session){
|
||||||
temp = session[sessionVar];
|
temp = session[sessionVar];
|
||||||
|
@ -72,7 +77,7 @@ exports.clearSessionValue = function(session, sessionVar){
|
||||||
return temp;
|
return temp;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.updateTotalCartAmount = function(req, res){
|
exports.updateTotalCartAmount = (req, res) => {
|
||||||
let config = exports.getConfig();
|
let config = exports.getConfig();
|
||||||
|
|
||||||
req.session.totalCartAmount = 0;
|
req.session.totalCartAmount = 0;
|
||||||
|
@ -90,8 +95,7 @@ exports.updateTotalCartAmount = function(req, res){
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.checkDirectorySync = function (directory){
|
exports.checkDirectorySync = (directory) => {
|
||||||
let fs = require('fs');
|
|
||||||
try{
|
try{
|
||||||
fs.statSync(directory);
|
fs.statSync(directory);
|
||||||
}catch(e){
|
}catch(e){
|
||||||
|
@ -99,16 +103,12 @@ exports.checkDirectorySync = function (directory){
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getThemes = function (){
|
exports.getThemes = () => {
|
||||||
let fs = require('fs');
|
|
||||||
let path = require('path');
|
|
||||||
return fs.readdirSync(path.join('public', 'themes')).filter(file => fs.statSync(path.join(path.join('public', 'themes'), file)).isDirectory());
|
return fs.readdirSync(path.join('public', 'themes')).filter(file => fs.statSync(path.join(path.join('public', 'themes'), file)).isDirectory());
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getImages = function (dir, req, res, callback){
|
exports.getImages = (dir, req, res, callback) => {
|
||||||
let db = req.app.db;
|
let db = req.app.db;
|
||||||
let glob = require('glob');
|
|
||||||
let fs = require('fs');
|
|
||||||
|
|
||||||
db.products.findOne({_id: exports.getId(dir)}, (err, product) => {
|
db.products.findOne({_id: exports.getId(dir)}, (err, product) => {
|
||||||
if(err){
|
if(err){
|
||||||
|
@ -144,10 +144,7 @@ exports.getImages = function (dir, req, res, callback){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getConfig = function(){
|
exports.getConfig = () => {
|
||||||
let fs = require('fs');
|
|
||||||
let path = require('path');
|
|
||||||
|
|
||||||
let config = JSON.parse(fs.readFileSync(path.join(__dirname, '../config', 'settings.json'), 'utf8'));
|
let config = JSON.parse(fs.readFileSync(path.join(__dirname, '../config', 'settings.json'), 'utf8'));
|
||||||
config.customCss = typeof config.customCss !== 'undefined' ? escape.decode(config.customCss) : null;
|
config.customCss = typeof config.customCss !== 'undefined' ? escape.decode(config.customCss) : null;
|
||||||
config.footerHtml = typeof config.footerHtml !== 'undefined' ? escape.decode(config.footerHtml) : null;
|
config.footerHtml = typeof config.footerHtml !== 'undefined' ? escape.decode(config.footerHtml) : null;
|
||||||
|
@ -171,9 +168,7 @@ exports.getConfig = function(){
|
||||||
return config;
|
return config;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getPaymentConfig = function(){
|
exports.getPaymentConfig = () => {
|
||||||
let fs = require('fs');
|
|
||||||
let path = require('path');
|
|
||||||
let siteConfig = this.getConfig();
|
let siteConfig = this.getConfig();
|
||||||
|
|
||||||
let config = [];
|
let config = [];
|
||||||
|
@ -184,9 +179,7 @@ exports.getPaymentConfig = function(){
|
||||||
return config;
|
return config;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.updateConfig = function(fields){
|
exports.updateConfig = (fields) => {
|
||||||
let fs = require('fs');
|
|
||||||
let path = require('path');
|
|
||||||
let settingsFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../config/settings.json'), 'utf8'));
|
let settingsFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../config/settings.json'), 'utf8'));
|
||||||
|
|
||||||
_.forEach(fields, (value, key) => {
|
_.forEach(fields, (value, key) => {
|
||||||
|
@ -230,12 +223,12 @@ exports.updateConfig = function(fields){
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getMenu = function(db){
|
exports.getMenu = (db) => {
|
||||||
return db.menu.findOne({});
|
return db.menu.findOne({});
|
||||||
};
|
};
|
||||||
|
|
||||||
// creates a new menu item
|
// creates a new menu item
|
||||||
exports.newMenu = function(req, res){
|
exports.newMenu = (req, res) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
return exports.getMenu(db)
|
return exports.getMenu(db)
|
||||||
.then((menu) => {
|
.then((menu) => {
|
||||||
|
@ -263,7 +256,7 @@ exports.newMenu = function(req, res){
|
||||||
};
|
};
|
||||||
|
|
||||||
// delete a menu item
|
// delete a menu item
|
||||||
exports.deleteMenu = function(req, res, menuIndex){
|
exports.deleteMenu = (req, res, menuIndex) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
return exports.getMenu(db)
|
return exports.getMenu(db)
|
||||||
.then((menu) => {
|
.then((menu) => {
|
||||||
|
@ -280,7 +273,7 @@ exports.deleteMenu = function(req, res, menuIndex){
|
||||||
};
|
};
|
||||||
|
|
||||||
// updates and existing menu item
|
// updates and existing menu item
|
||||||
exports.updateMenu = function(req, res){
|
exports.updateMenu = (req, res) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
return exports.getMenu(db)
|
return exports.getMenu(db)
|
||||||
.then((menu) => {
|
.then((menu) => {
|
||||||
|
@ -298,7 +291,7 @@ exports.updateMenu = function(req, res){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.sortMenu = function(menu){
|
exports.sortMenu = (menu) => {
|
||||||
if(menu && menu.items){
|
if(menu && menu.items){
|
||||||
menu.items = _.sortBy(menu.items, 'order');
|
menu.items = _.sortBy(menu.items, 'order');
|
||||||
return menu;
|
return menu;
|
||||||
|
@ -307,7 +300,7 @@ exports.sortMenu = function(menu){
|
||||||
};
|
};
|
||||||
|
|
||||||
// orders the menu
|
// orders the menu
|
||||||
exports.orderMenu = function(req, res){
|
exports.orderMenu = (req, res) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
return exports.getMenu(db)
|
return exports.getMenu(db)
|
||||||
.then((menu) => {
|
.then((menu) => {
|
||||||
|
@ -325,11 +318,8 @@ exports.orderMenu = function(req, res){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getEmailTemplate = function(result){
|
exports.getEmailTemplate = (result) => {
|
||||||
let cheerio = require('cheerio');
|
|
||||||
let config = this.getConfig();
|
let config = this.getConfig();
|
||||||
let fs = require('fs');
|
|
||||||
let path = require('path');
|
|
||||||
|
|
||||||
let template = fs.readFileSync(path.join(__dirname, '../public/email_template.html'), 'utf8');
|
let template = fs.readFileSync(path.join(__dirname, '../public/email_template.html'), 'utf8');
|
||||||
|
|
||||||
|
@ -347,9 +337,8 @@ exports.getEmailTemplate = function(result){
|
||||||
return $.html();
|
return $.html();
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.sendEmail = function(to, subject, body){
|
exports.sendEmail = (to, subject, body) => {
|
||||||
let config = this.getConfig();
|
let config = this.getConfig();
|
||||||
let nodemailer = require('nodemailer');
|
|
||||||
|
|
||||||
let emailSettings = {
|
let emailSettings = {
|
||||||
host: config.emailHost,
|
host: config.emailHost,
|
||||||
|
@ -384,7 +373,7 @@ exports.sendEmail = function(to, subject, body){
|
||||||
};
|
};
|
||||||
|
|
||||||
// gets the correct type of index ID
|
// gets the correct type of index ID
|
||||||
exports.getId = function(id){
|
exports.getId = (id) => {
|
||||||
if(id){
|
if(id){
|
||||||
if(id.length !== 24){
|
if(id.length !== 24){
|
||||||
return id;
|
return id;
|
||||||
|
@ -394,7 +383,7 @@ exports.getId = function(id){
|
||||||
};
|
};
|
||||||
|
|
||||||
// run the DB query
|
// run the DB query
|
||||||
exports.dbQuery = function(db, query, sort, limit, callback){
|
exports.dbQuery = (db, query, sort, limit, callback) => {
|
||||||
if(sort && limit){
|
if(sort && limit){
|
||||||
db.find(query).sort(sort).limit(parseInt(limit)).toArray((err, results) => {
|
db.find(query).sort(sort).limit(parseInt(limit)).toArray((err, results) => {
|
||||||
if(err){
|
if(err){
|
||||||
|
@ -412,6 +401,32 @@ exports.dbQuery = function(db, query, sort, limit, callback){
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.getData = async (req, page, query) => {
|
||||||
|
let db = req.app.db;
|
||||||
|
let config = exports.getConfig();
|
||||||
|
let numberProducts = config.productsPerPage ? config.productsPerPage : 6;
|
||||||
|
|
||||||
|
let skip = 0;
|
||||||
|
if(page > 1){
|
||||||
|
skip = (page - 1) * numberProducts;
|
||||||
|
}
|
||||||
|
|
||||||
|
query['productPublished'] = 'true';
|
||||||
|
|
||||||
|
// Run our queries
|
||||||
|
return Promise.all([
|
||||||
|
db.products.find(query).skip(skip).limit(parseInt(numberProducts)).toArray(),
|
||||||
|
db.products.count(query)
|
||||||
|
])
|
||||||
|
.then((result) => {
|
||||||
|
const returnData = {data: result[0], totalProducts: result[1]};
|
||||||
|
return returnData;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
throw new Error('Error retrieving products');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
exports.indexProducts = (app) => {
|
exports.indexProducts = (app) => {
|
||||||
// index all products in lunr on startup
|
// index all products in lunr on startup
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
@ -422,7 +437,7 @@ exports.indexProducts = (app) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup lunr indexing
|
// setup lunr indexing
|
||||||
const productsIndex = lunr(function (){
|
const productsIndex = lunr(function(){
|
||||||
this.field('productTitle', {boost: 10});
|
this.field('productTitle', {boost: 10});
|
||||||
this.field('productTags', {boost: 5});
|
this.field('productTags', {boost: 5});
|
||||||
this.field('productDescription');
|
this.field('productDescription');
|
||||||
|
@ -458,7 +473,7 @@ exports.indexOrders = (app, cb) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup lunr indexing
|
// setup lunr indexing
|
||||||
const ordersIndex = lunr(function (){
|
const ordersIndex = lunr(function(){
|
||||||
this.field('orderEmail', {boost: 10});
|
this.field('orderEmail', {boost: 10});
|
||||||
this.field('orderLastname', {boost: 5});
|
this.field('orderLastname', {boost: 5});
|
||||||
this.field('orderPostcode');
|
this.field('orderPostcode');
|
||||||
|
|
112
routes/index.js
112
routes/index.js
|
@ -13,7 +13,7 @@ router.get('/payment/:orderId', async (req, res, next) => {
|
||||||
if(err){
|
if(err){
|
||||||
console.info(err.stack);
|
console.info(err.stack);
|
||||||
}
|
}
|
||||||
res.render(config.themeViews + 'payment_complete', {
|
res.render(`${config.themeViews}payment_complete`, {
|
||||||
title: 'Payment complete',
|
title: 'Payment complete',
|
||||||
config: common.getConfig(),
|
config: common.getConfig(),
|
||||||
session: req.session,
|
session: req.session,
|
||||||
|
@ -40,7 +40,7 @@ router.get('/checkout', async (req, res, next) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// render the checkout
|
// render the checkout
|
||||||
res.render(config.themeViews + 'checkout', {
|
res.render(`${config.themeViews}checkout`, {
|
||||||
title: 'Checkout',
|
title: 'Checkout',
|
||||||
config: common.getConfig(),
|
config: common.getConfig(),
|
||||||
session: req.session,
|
session: req.session,
|
||||||
|
@ -66,7 +66,7 @@ router.get('/pay', async (req, res, next) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// render the payment page
|
// render the payment page
|
||||||
res.render(config.themeViews + 'pay', {
|
res.render(`${config.themeViews}pay`, {
|
||||||
title: 'Pay',
|
title: 'Pay',
|
||||||
config: common.getConfig(),
|
config: common.getConfig(),
|
||||||
paymentConfig: common.getPaymentConfig(),
|
paymentConfig: common.getPaymentConfig(),
|
||||||
|
@ -112,7 +112,7 @@ router.get('/product/:id', (req, res) => {
|
||||||
|
|
||||||
// show the view
|
// show the view
|
||||||
common.getImages(result._id, req, res, async (images) => {
|
common.getImages(result._id, req, res, async (images) => {
|
||||||
res.render(config.themeViews + 'product', {
|
res.render(`${config.themeViews}product`, {
|
||||||
title: result.productTitle,
|
title: result.productTitle,
|
||||||
result: result,
|
result: result,
|
||||||
productOptions: productOptions,
|
productOptions: productOptions,
|
||||||
|
@ -254,13 +254,12 @@ router.get('/search/:searchTerm/:pageNum?', (req, res) => {
|
||||||
pageNum = req.params.pageNum;
|
pageNum = req.params.pageNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we search on the lunr indexes
|
Promise.all([
|
||||||
getData(req, pageNum, {_id: {$in: lunrIdArray}}, async (err, results) => {
|
common.getData(req, pageNum, {_id: {$in: lunrIdArray}}),
|
||||||
if(err){
|
common.getMenu(db)
|
||||||
console.error(colors.red('Error searching for products', err));
|
])
|
||||||
}
|
.then(([results, menu]) => {
|
||||||
|
res.render(`${config.themeViews}index`, {
|
||||||
res.render(config.themeViews + 'index', {
|
|
||||||
title: 'Results',
|
title: 'Results',
|
||||||
results: results.data,
|
results: results.data,
|
||||||
filtered: true,
|
filtered: true,
|
||||||
|
@ -275,10 +274,13 @@ router.get('/search/:searchTerm/:pageNum?', (req, res) => {
|
||||||
pageNum: pageNum,
|
pageNum: pageNum,
|
||||||
paginateUrl: 'search',
|
paginateUrl: 'search',
|
||||||
config: config,
|
config: config,
|
||||||
menu: common.sortMenu(await common.getMenu(db)),
|
menu: common.sortMenu(menu),
|
||||||
helpers: req.handlebars.helpers,
|
helpers: req.handlebars.helpers,
|
||||||
showFooter: 'showFooter'
|
showFooter: 'showFooter'
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(colors.red('Error searching for products', err));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -300,13 +302,14 @@ router.get('/category/:cat/:pageNum?', (req, res) => {
|
||||||
pageNum = req.params.pageNum;
|
pageNum = req.params.pageNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we search on the lunr indexes
|
Promise.all([
|
||||||
getData(req, pageNum, {_id: {$in: lunrIdArray}}, async (err, results) => {
|
common.getData(req, pageNum, {_id: {$in: lunrIdArray}}),
|
||||||
if(err){
|
common.getMenu(db)
|
||||||
console.error(colors.red('Error getting products for category', err));
|
])
|
||||||
}
|
.then(([results, menu]) => {
|
||||||
|
const sortedMenu = common.sortMenu(menu);
|
||||||
|
|
||||||
res.render(config.themeViews + 'index', {
|
res.render(`${config.themeViews}index`, {
|
||||||
title: 'Category',
|
title: 'Category',
|
||||||
results: results.data,
|
results: results.data,
|
||||||
filtered: true,
|
filtered: true,
|
||||||
|
@ -319,13 +322,16 @@ router.get('/category/:cat/:pageNum?', (req, res) => {
|
||||||
productsPerPage: numberProducts,
|
productsPerPage: numberProducts,
|
||||||
totalProductCount: results.totalProducts,
|
totalProductCount: results.totalProducts,
|
||||||
pageNum: pageNum,
|
pageNum: pageNum,
|
||||||
menuLink: _.find(common.sortMenu(await common.getMenu(db)).items, (obj) => { return obj.link === searchTerm; }),
|
menuLink: _.find(sortedMenu.items, (obj) => { return obj.link === searchTerm; }),
|
||||||
paginateUrl: 'category',
|
paginateUrl: 'category',
|
||||||
config: config,
|
config: config,
|
||||||
menu: common.sortMenu(await common.getMenu(db)),
|
menu: sortedMenu,
|
||||||
helpers: req.handlebars.helpers,
|
helpers: req.handlebars.helpers,
|
||||||
showFooter: 'showFooter'
|
showFooter: 'showFooter'
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(colors.red('Error getting products for category', err));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -367,12 +373,12 @@ router.get('/page/:pageNum', (req, res, next) => {
|
||||||
let config = common.getConfig();
|
let config = common.getConfig();
|
||||||
let numberProducts = config.productsPerPage ? config.productsPerPage : 6;
|
let numberProducts = config.productsPerPage ? config.productsPerPage : 6;
|
||||||
|
|
||||||
getData(req, req.params.pageNum, {}, async (err, results) => {
|
Promise.all([
|
||||||
if(err){
|
common.getData(req, req.params.pageNum),
|
||||||
console.error(colors.red('Error getting products for page', err));
|
common.getMenu(db)
|
||||||
}
|
])
|
||||||
|
.then(([results, menu]) => {
|
||||||
res.render(config.themeViews + 'index', {
|
res.render(`${config.themeViews}index`, {
|
||||||
title: 'Shop',
|
title: 'Shop',
|
||||||
results: results.data,
|
results: results.data,
|
||||||
session: req.session,
|
session: req.session,
|
||||||
|
@ -387,11 +393,15 @@ router.get('/page/:pageNum', (req, res, next) => {
|
||||||
paginateUrl: 'page',
|
paginateUrl: 'page',
|
||||||
helpers: req.handlebars.helpers,
|
helpers: req.handlebars.helpers,
|
||||||
showFooter: 'showFooter',
|
showFooter: 'showFooter',
|
||||||
menu: common.sortMenu(await common.getMenu(db))
|
menu: common.sortMenu(menu)
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(colors.red('Error getting products for page', err));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// The main entry point of the shop
|
||||||
router.get('/:page?', (req, res, next) => {
|
router.get('/:page?', (req, res, next) => {
|
||||||
let db = req.app.db;
|
let db = req.app.db;
|
||||||
let config = common.getConfig();
|
let config = common.getConfig();
|
||||||
|
@ -399,13 +409,13 @@ router.get('/:page?', (req, res, next) => {
|
||||||
|
|
||||||
// if no page is specified, just render page 1 of the cart
|
// if no page is specified, just render page 1 of the cart
|
||||||
if(!req.params.page){
|
if(!req.params.page){
|
||||||
getData(req, 1, {}, async (err, results) => {
|
Promise.all([
|
||||||
if(err){
|
common.getData(req, 1, {}),
|
||||||
console.error(colors.red('Error getting products for page', err));
|
common.getMenu(db)
|
||||||
}
|
])
|
||||||
|
.then(([results, menu]) => {
|
||||||
res.render(config.themeViews + 'index', {
|
res.render(`${config.themeViews}index`, {
|
||||||
title: 'Shop',
|
title: `${config.cartTitle} - Shop`,
|
||||||
theme: config.theme,
|
theme: config.theme,
|
||||||
results: results.data,
|
results: results.data,
|
||||||
session: req.session,
|
session: req.session,
|
||||||
|
@ -419,8 +429,11 @@ router.get('/:page?', (req, res, next) => {
|
||||||
paginateUrl: 'page',
|
paginateUrl: 'page',
|
||||||
helpers: req.handlebars.helpers,
|
helpers: req.handlebars.helpers,
|
||||||
showFooter: 'showFooter',
|
showFooter: 'showFooter',
|
||||||
menu: common.sortMenu(await common.getMenu(db))
|
menu: common.sortMenu(menu)
|
||||||
});
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.error(colors.red('Error getting products for page', err));
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
if(req.params.page === 'admin'){
|
if(req.params.page === 'admin'){
|
||||||
|
@ -434,7 +447,7 @@ router.get('/:page?', (req, res, next) => {
|
||||||
}
|
}
|
||||||
// if we have a page lets render it, else throw 404
|
// if we have a page lets render it, else throw 404
|
||||||
if(page){
|
if(page){
|
||||||
res.render(config.themeViews + 'page', {
|
res.render(`${config.themeViews}page`, {
|
||||||
title: page.pageName,
|
title: page.pageName,
|
||||||
page: page,
|
page: page,
|
||||||
session: req.session,
|
session: req.session,
|
||||||
|
@ -461,31 +474,4 @@ router.get('/:page?', (req, res, next) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const getData = function (req, page, query, cb){
|
|
||||||
let db = req.app.db;
|
|
||||||
let config = common.getConfig();
|
|
||||||
let numberProducts = config.productsPerPage ? config.productsPerPage : 6;
|
|
||||||
|
|
||||||
let skip = 0;
|
|
||||||
if(page > 1){
|
|
||||||
skip = (page - 1) * numberProducts;
|
|
||||||
}
|
|
||||||
|
|
||||||
query['productPublished'] = 'true';
|
|
||||||
|
|
||||||
db.products.count(query, (err, totalProducts) => {
|
|
||||||
if(err){
|
|
||||||
console.error(colors.red('Error getting total product count', err));
|
|
||||||
}
|
|
||||||
|
|
||||||
db.products.find(query).skip(skip).limit(parseInt(numberProducts)).toArray((err, results) => {
|
|
||||||
if(err){
|
|
||||||
cb(new Error('Error retrieving products'), null);
|
|
||||||
}else{
|
|
||||||
cb(null, {data: results, totalProducts: totalProducts});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|
Loading…
Reference in New Issue