UNPKG

express-generator-typescript

Version:

Generate new Express applications similar to express-generate which but sets it up to use TypeScript instead

87 lines (64 loc) 2.41 kB
import morgan from 'morgan'; import path from 'path'; import helmet from 'helmet'; import express, { Request, Response, NextFunction } from 'express'; import logger from 'jet-logger'; import 'express-async-errors'; import BaseRouter from '@src/routes'; import Paths from '@src/common/Paths'; import ENV from '@src/common/ENV'; import HttpStatusCodes from '@src/common/HttpStatusCodes'; import { RouteError } from '@src/common/route-errors'; import { NodeEnvs } from '@src/common/constants'; /****************************************************************************** Setup ******************************************************************************/ const app = express(); // **** Middleware **** // // Basic middleware app.use(express.json()); app.use(express.urlencoded({extended: true})); // Show routes called in console during development if (ENV.NodeEnv === NodeEnvs.Dev) { app.use(morgan('dev')); } // Security if (ENV.NodeEnv === NodeEnvs.Production) { // eslint-disable-next-line n/no-process-env if (!process.env.DISABLE_HELMET) { app.use(helmet()); } } // Add APIs, must be after middleware app.use(Paths.Base, BaseRouter); // Add error handler app.use((err: Error, _: Request, res: Response, next: NextFunction) => { if (ENV.NodeEnv !== NodeEnvs.Test.valueOf()) { logger.err(err, true); } let status = HttpStatusCodes.BAD_REQUEST; if (err instanceof RouteError) { status = err.status; res.status(status).json({ error: err.message }); } return next(err); }); // **** FrontEnd Content **** // // Set views directory (html) const viewsDir = path.join(__dirname, 'views'); app.set('views', viewsDir); // Set static directory (js and css). const staticDir = path.join(__dirname, 'public'); app.use(express.static(staticDir)); // Nav to users pg by default app.get('/', (_: Request, res: Response) => { return res.redirect('/users'); }); // Redirect to login if not logged in. app.get('/users', (_: Request, res: Response) => { return res.sendFile('users.html', { root: viewsDir }); }); /****************************************************************************** Export default ******************************************************************************/ export default app;