E.W.O. Next / All files / src/server express.ts

0% Statements 0/35
0% Branches 0/6
0% Functions 0/4
0% Lines 0/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79                                                                                                                                                             
/**
 * @module Server.Express
 * ExpressJS Server
 */
 
import express = require('express');
import session = require('express-session');
import logger = require('morgan');
import sassMiddleware = require('node-sass-middleware');
import path = require('path');
import indexRoutes from './routes';
import charactersRoutes from './routes/characters';
import usersRoutes from './routes/users';
 
export class ExpressServer {
 
  public readonly session;
  public readonly app;
 
  public constructor(reduxStoreMiddleware) {
    const app = express();
 
    // View engine
    app.set('views', path.join(__dirname, '/views'));
    app.set('view engine', 'pug');
 
    const FileStore = require('session-file-store')(session);
 
    // Session manager
    this.session = session({
      secret: 'my-secret',
      store: new FileStore({ logFn: () => { } }),
      cookie: {
        secure: false, // false for dev, true for prod
      },
      resave: false,
      saveUninitialized: false,
    });
 
    // Middlewares
    app.use(reduxStoreMiddleware);
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(sassMiddleware({
      src: path.join(__dirname, 'public'),
      dest: path.join(__dirname, 'public'),
      indentedSyntax: false, // true = .sass and false = .scss
      sourceMap: true,
    }));
    app.use(express.static(path.join(__dirname, 'public')));
    app.use(express.static(path.join(__dirname, '../..', 'dist', 'client')));
    app.use(this.session);
    app.use((req, res: express.Response, next) => {
      if (req.session !== undefined) {
        res.locals.user = req.session.user;
      }
      next();
    });
 
    app.use('/users', usersRoutes);
    app.use('/characters', charactersRoutes);
    app.use('*', indexRoutes);
 
    // error handler
    app.use((err, req, res, _next) => {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};
 
      // render the error page
      res.status(err.status || 500);
      res.render('error');
    });
 
    this.app = app;
  }
}