express-app.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import * as cors from "cors";
  2. import * as express from "express";
  3. import * as morgan from "morgan";
  4. import { createHandler } from "graphql-http/lib/use/express";
  5. import { apiRouter, webRouter } from "./routers";
  6. import { swaggerUIServe, swaggerUISetup } from "../../libs/swagger";
  7. import { schema, root } from "../../libs/graphql";
  8. const helmet = require("helmet");
  9. export default class ExpressApp {
  10. private static _instance: express.Express;
  11. // eslint-disable-next-line @typescript-eslint/no-empty-function
  12. private constructor() {}
  13. private static initRouters() {
  14. this._instance.use("/api", apiRouter);
  15. this._instance.use("/", webRouter);
  16. this._instance.use("/swagger", swaggerUIServe, swaggerUISetup);
  17. this._instance.use("/graphql", createHandler({
  18. schema: schema,
  19. rootValue: root
  20. }));
  21. }
  22. public static get instance(): express.Express {
  23. if (!this._instance) {
  24. this._instance = express();
  25. this._instance.use(cors());
  26. this._instance.use(morgan("combined"));
  27. this._instance.use(express.urlencoded({ extended: true }));
  28. this._instance.use(express.json());
  29. // this._instance.use(helmet.contentSecurityPolicy());
  30. // this._instance.use(helmet.crossOriginEmbedderPolicy());
  31. this._instance.use(helmet.crossOriginOpenerPolicy());
  32. this._instance.use(helmet.crossOriginResourcePolicy());
  33. this._instance.use(helmet.dnsPrefetchControl());
  34. this._instance.use(helmet.expectCt());
  35. this._instance.use(helmet.frameguard());
  36. this._instance.use(helmet.hidePoweredBy());
  37. this._instance.use(helmet.hsts());
  38. this._instance.use(helmet.ieNoOpen());
  39. this._instance.use(helmet.noSniff());
  40. this._instance.use(helmet.originAgentCluster());
  41. this._instance.use(helmet.permittedCrossDomainPolicies());
  42. this._instance.use(helmet.referrerPolicy());
  43. this._instance.use(helmet.xssFilter());
  44. this.initRouters();
  45. }
  46. return this._instance;
  47. }
  48. }