const express = require(`express`); const app = express(); const passport = require(`passport`); const { users } = require(`./controllers`); /** * Configure Passport */ try { require(`./config/passport`)(passport); } catch (error) { console.log(error); } /** * Configure Express.js Middleware */ // Enable CORS app.use(function (req, res, next) { res.header(`Access-Control-Allow-Origin`, `*`); res.header(`Access-Control-Allow-Methods`, `*`); res.header(`Access-Control-Allow-Headers`, `*`); res.header(`x-powered-by`, `serverless-express`); next(); }); // Initialize Passport and restore authentication state, if any, from the session app.use(passport.initialize()); app.use(passport.session()); // Enable JSON use app.use(express.json()); // Since Express doesn't support error handling of promises out of the box, // this handler enables that const asyncHandler = fn => (req, res, next) => { return Promise .resolve(fn(req, res, next)) .catch(next); }; /** * Routes - Public */ app.options(`*`, (req, res) => { res.status(200).send(); }); app.post(`/users/register`, asyncHandler(users.register)); app.post(`/users/login`, asyncHandler(users.login)); app.get(`/test/`, (req, res) => { res.status(200).send(`Request received`); }); /** * Routes - Protected */ app.post(`/user`, passport.authenticate(`jwt`, { session: false }), asyncHandler(users.get)); /** * Routes - Catch-All */ app.get(`/*`, (req, res) => { res.status(404).send(`Route not found`); }); /** * Error Handler */ app.use(function (err, req, res) { console.error(err); res.status(500).json({ error: `Internal Serverless Error - "${err.message}"` }); }); module.exports = app;