changes regarding error handling

This commit is contained in:
2024-03-09 16:45:27 -06:00
parent b9f9c8455f
commit b2b2dba352
6 changed files with 94 additions and 31 deletions

View File

@@ -138,19 +138,29 @@ app.use(require("./routes/eventlineup").router)
app.use(require("./routes/eventsheet").router) app.use(require("./routes/eventsheet").router)
// app.use("/", indexRouter.team_router); // app.use("/", indexRouter.team_router);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler // error handler
app.use(function (err, req, res, next) { app.use(function (err, req, res, next) {
// set locals, only providing error in development // set locals, only providing error in development
if (err) {
res.locals.message = err.message; res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {}; res.locals.error = req.app.get("env") === "development" ? err : {};
if (typeof err === 'string' || err instanceof String) {
err = {
message: err
}
}
console.log("error:", err); console.log("error:", err);
// render the error page // render the error page
res.status(err.status || 500).render("error", { title:"Error", layout: req.layout, message: err.message }); res.status(err.status || 500).render("error", { title:"Error", layout: req.layout, message: err.message });
}
else {
next();
}
}); });
// catch 404 and forward to error handler
// app.use(function (req, res, next) {
// next(createError(404));
// });
module.exports = {app}; module.exports = {app};

View File

@@ -1,5 +1,6 @@
tsUtils = require("../lib/utils"); tsUtils = require("../lib/utils");
const path = require('path') const path = require('path');
const { teamsnapFailure, tsPromise } = require("../lib/utils");
exports.helpers = { exports.helpers = {
@@ -23,7 +24,7 @@ exports.getEvents = async (req, res, next) => {
const {user, team, layout} = req const {user, team, layout} = req
const bulkLoadTypes = ["event", "availabilitySummary"] const bulkLoadTypes = ["event", "availabilitySummary"]
req.promises.push( req.promises.push(
teamsnap.bulkLoad(team.id, bulkLoadTypes , () => {tsUtils.teamsnapCallback;req.items = tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team.id, req)}) tsPromise('bulkLoad', {teamId: team.id, types: bulkLoadTypes})
.then(items=>tsUtils.groupTeamsnapItems(items)) .then(items=>tsUtils.groupTeamsnapItems(items))
.then(items=>{ .then(items=>{
items.events.forEach((event) => { items.events.forEach((event) => {
@@ -31,16 +32,25 @@ exports.getEvents = async (req, res, next) => {
} }
) )
req.events = items.events; req.events = items.events;
} }
) )
.then(tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team.id, req))
.catch((err) => {
teamsnapFailure(err,next)
})
) )
await Promise.all(req.promises) await Promise.all(req.promises)
const context = {
title: "Events", try {
user, team, layout, const context = {
events: req.events, title: "Events",
}; user, team, layout,
res.render("event/list", context); events: req.events,
};
res.render("event/list", context);
} catch(e) {
next(e)
}
}; };
exports.getEvent = async (req, res, next) => { exports.getEvent = async (req, res, next) => {

View File

@@ -5,9 +5,12 @@ exports.partials = path.join(__dirname, "../views/eventsheet/partials")
exports.getEventSheet = async (req,res) =>{ exports.getEventSheet = async (req,res) =>{
req.promises.push( req.promises.push(
teamsnap.loadOpponents(req.team.id, (err, opponents)=>{ teamsnap.loadOpponents(
req.team.id,
(err, opponents)=>{
if (err) console.log("error in route/opponent.js", err); if (err) console.log("error in route/opponent.js", err);
}).then(opponents => {req.opponent=opponents.find(o=>o.id==req.event.opponentId);}) }
).then(opponents => {req.opponent=opponents.find(o=>o.id==req.event.opponentId);})
) )
await Promise.all(req.promises) await Promise.all(req.promises)
req.promises.push( req.promises.push(

View File

@@ -1,21 +1,42 @@
const { teamsnapCallback } = require("../lib/utils");
utils = require("../lib/utils"); utils = require("../lib/utils");
exports.getTeams = async (req, res, next) => { exports.getTeams = async (req, res, next) => {
const {layout, user} = req const {layout} = req
teams = await teamsnap.loadTeams((err, teams) => { const {user_id} = req.params
if (err) console.log("error in team.js", err); promise = teamsnap.loadTeams({'userId':user_id},
}) (err, items) =>{
context = { layout, title: "Teams", teams: teams.filter(t=>!t.isRetired), user }; teamsnapCallback(err,items);
res.render("team/list", context); req.teams = items;
})
.then(() => tsUtils.teamsnapLog('loadTeams', types=['teams'], null, req))
.fail(
next
)
req.promises.push(promise)
await Promise.all(req.promises)
try {
const context = { layout, title: "Teams", teams: req.teams.filter(t=>!t.isRetired) };
res.render("team/list", context);
} catch (e){
next(e);
}
}; };
exports.getTeamHome = async (req, res, next) => { exports.getTeamHome = async (req, res, next) => {
await Promise.all(req.promises) await Promise.all(req.promises)
const {user, team, team_preferences, upcoming_events, recent_events, layout} = req const {user, team, team_preferences, upcoming_events, recent_events, layout} = req
context = {
title: "Home",
layout, team, user, team_preferences, upcoming_events, recent_events
};
res.render("team/home", context); try {
context = {
title: "Home",
layout, team, user, team_preferences, upcoming_events, recent_events
};
res.render("team/home", context);
} catch (e) {
next (e);
}
}; };

View File

@@ -68,21 +68,40 @@ exports.teamsnapLog = (method, types, id, req, message="") => {
`on url ${req.url}`, `on url ${req.url}`,
`"${message}"` `"${message}"`
) )
return;
}
exports.tsPromise = (func_name, params) => {
return new Promise(function(resolve, reject) {
teamsnap.bulkLoad(
params,
(err, data) => {
console.log();
if (err !== null) {
reject(err);
}
else {
resolve(data);
}
}
)
;
});
} }
exports.teamsnapCallback = (err,items) => { exports.teamsnapCallback = (err,items) => {
if (err) { if (err) {
console.log(err.message); console.log(err.message);
throw new Error(err)
} }
return items; return items;
} }
exports.teamsnapFailure = (err) => { exports.teamsnapFailure = (err, next) => {
if (err) { if (err) {
console.log(err.message); console.log(err.message);
} }
next(err);
} }
const getPluralType = (type) =>{ const getPluralType = (type) =>{

View File

@@ -19,13 +19,13 @@ const loadTeam = async (req,res,next) => {
tsUtils.teamsnapCallback tsUtils.teamsnapCallback
).then(bulkLoadItems=>{ ).then(bulkLoadItems=>{
const items = tsUtils.groupTeamsnapItems(bulkLoadItems, bulkLoadTypes) const items = tsUtils.groupTeamsnapItems(bulkLoadItems, bulkLoadTypes)
tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team_id, req);
req.members = items.members; req.members = items.members;
req.team_media_group = items.teamMediaGroups?.pop(); req.team_media_group = items.teamMediaGroups?.pop();
req.team_preferences = items.teamsPreferences.pop(); req.team_preferences = items.teamsPreferences.pop();
req.session.current_team_id = req.team.id req.session.current_team_id = req.team.id
} }
) )
.then(() => tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team_id, req))
) )
} }
else { else {