diff --git a/src/app.js b/src/app.js index d78669f..e9db2b9 100644 --- a/src/app.js +++ b/src/app.js @@ -138,19 +138,29 @@ app.use(require("./routes/eventlineup").router) app.use(require("./routes/eventsheet").router) // app.use("/", indexRouter.team_router); -// catch 404 and forward to error handler -app.use(function (req, res, next) { - next(createError(404)); -}); - // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development + if (err) { res.locals.message = err.message; res.locals.error = req.app.get("env") === "development" ? err : {}; + if (typeof err === 'string' || err instanceof String) { + err = { + message: err + } + } console.log("error:", err); // render the error page 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}; \ No newline at end of file diff --git a/src/controllers/event.js b/src/controllers/event.js index 435976d..4020121 100644 --- a/src/controllers/event.js +++ b/src/controllers/event.js @@ -1,5 +1,6 @@ tsUtils = require("../lib/utils"); -const path = require('path') +const path = require('path'); +const { teamsnapFailure, tsPromise } = require("../lib/utils"); exports.helpers = { @@ -23,7 +24,7 @@ exports.getEvents = async (req, res, next) => { const {user, team, layout} = req const bulkLoadTypes = ["event", "availabilitySummary"] 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=>{ items.events.forEach((event) => { @@ -31,16 +32,25 @@ exports.getEvents = async (req, res, next) => { } ) req.events = items.events; - } - ) + } + ) + .then(tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team.id, req)) + .catch((err) => { + teamsnapFailure(err,next) + }) ) await Promise.all(req.promises) - const context = { - title: "Events", - user, team, layout, - events: req.events, - }; - res.render("event/list", context); + + try { + const context = { + title: "Events", + user, team, layout, + events: req.events, + }; + res.render("event/list", context); + } catch(e) { + next(e) + } }; exports.getEvent = async (req, res, next) => { diff --git a/src/controllers/eventsheet.js b/src/controllers/eventsheet.js index 24958b6..2256577 100644 --- a/src/controllers/eventsheet.js +++ b/src/controllers/eventsheet.js @@ -5,9 +5,12 @@ exports.partials = path.join(__dirname, "../views/eventsheet/partials") exports.getEventSheet = async (req,res) =>{ 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); - }).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) req.promises.push( diff --git a/src/controllers/team.js b/src/controllers/team.js index 9a265d7..efbdc5b 100644 --- a/src/controllers/team.js +++ b/src/controllers/team.js @@ -1,21 +1,42 @@ +const { teamsnapCallback } = require("../lib/utils"); + utils = require("../lib/utils"); exports.getTeams = async (req, res, next) => { - const {layout, user} = req - teams = await teamsnap.loadTeams((err, teams) => { - if (err) console.log("error in team.js", err); - }) - context = { layout, title: "Teams", teams: teams.filter(t=>!t.isRetired), user }; - res.render("team/list", context); + const {layout} = req + const {user_id} = req.params + promise = teamsnap.loadTeams({'userId':user_id}, + (err, items) =>{ + teamsnapCallback(err,items); + 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) => { await Promise.all(req.promises) 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); + } + }; diff --git a/src/lib/utils.js b/src/lib/utils.js index dd7e7c2..329d210 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -68,21 +68,40 @@ exports.teamsnapLog = (method, types, id, req, message="") => { `on url ${req.url}`, `"${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) => { if (err) { console.log(err.message); + throw new Error(err) } - return items; } -exports.teamsnapFailure = (err) => { +exports.teamsnapFailure = (err, next) => { if (err) { console.log(err.message); } + next(err); } const getPluralType = (type) =>{ diff --git a/src/routes/team.js b/src/routes/team.js index 07f53ed..9b915a1 100644 --- a/src/routes/team.js +++ b/src/routes/team.js @@ -19,13 +19,13 @@ const loadTeam = async (req,res,next) => { tsUtils.teamsnapCallback ).then(bulkLoadItems=>{ const items = tsUtils.groupTeamsnapItems(bulkLoadItems, bulkLoadTypes) - tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team_id, req); req.members = items.members; req.team_media_group = items.teamMediaGroups?.pop(); req.team_preferences = items.teamsPreferences.pop(); req.session.current_team_id = req.team.id } ) + .then(() => tsUtils.teamsnapLog('bulkLoad', types=bulkLoadTypes, team_id, req)) ) } else {