UNPKG

@tanndev/maelstrom

Version:

Rules and resources for Maelstrom RPG.

61 lines (50 loc) 1.9 kB
const cookieParser = require('cookie-parser'); const createError = require('http-errors'); const express = require('express'); const favicon = require('serve-favicon'); const logger = require('morgan'); const path = require('path'); const Roll = require('./classes/Roll'); const app = express(); // Set up view engine and static assets. app.set('view engine', 'pug'); app.set('views', path.join(__dirname, 'client/views')); app.use(favicon(path.join(__dirname, 'client/static/images/icon8-favicon.ico'))); app.use(express.static(path.join(__dirname, 'client/static'))); // Set up logger and data parsers. app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({extended: false})); app.use(cookieParser()); // Route client requests. app.use(require('./client/router')); // APIs app.get('/roll', (req, res, next) => { try { let pool = parseInt(req.query.pool) || undefined; let difficulty = parseInt(req.query.difficulty) || undefined; let threshold = parseInt(req.query.threshold) || undefined; let specialty = req.query.hasOwnProperty('specialty'); let roll = new Roll(pool, {difficulty, threshold, specialty}); res.json(roll); } catch (error) { return next(createError(error)); } }); // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (error, req, res, next) { let {statusCode = 500, message, expose, stack} = error; res.locals.statusCode = statusCode; res.locals.message = message; if (expose || app.get('env') === 'development') res.locals.stack = stack.split(__dirname).join('maelstrom'); res.status(statusCode).render('error'); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Listening on http://localhost:${PORT}`); }); module.exports = app;