app.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. "use strict";
  2. require("dotenv").config();
  3. const cors = require("cors");
  4. const express = require("express");
  5. const helmet = require("helmet");
  6. const http = require("http");
  7. const { ApolloServer, gql } = require("apollo-server-express");
  8. const { ApolloServerPluginDrainHttpServer } = require("apollo-server-core");
  9. const corsOrigins = process.env.APP_CORS_ORIGINS.split(",");
  10. const app = express();
  11. app.enable("trust proxy");
  12. app.use(cors({ origin: corsOrigins }));
  13. if (app.get("env") === "production") {
  14. app.use(helmet());
  15. app.use(helmet.contentSecurityPolicy());
  16. }
  17. const httpServer = http.createServer(app);
  18. const typeDefs = gql`
  19. type Hello {
  20. message: String
  21. }
  22. type Query {
  23. hello: Hello
  24. }
  25. `;
  26. const resolvers = {
  27. Query: {
  28. hello: _ => ({ message: "Hello World!" })
  29. }
  30. };
  31. const apollo = new ApolloServer({
  32. typeDefs,
  33. resolvers,
  34. plugin: [ApolloServerPluginDrainHttpServer({ httpServer })]
  35. });
  36. apollo.start().then(_ => {
  37. apollo.applyMiddleware({ app });
  38. app.all("*", (request, response) => response.send(""));
  39. httpServer.listen(process.env.APP_PORT);
  40. let apolloData = httpServer.address();
  41. console.log(`GraphQL service listening on ${apolloData.address}:${apolloData.port}${apollo.graphqlPath}`);
  42. }).catch(error => console.log(error.message));