index.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /**
  2. * Configure dotenv:
  3. * https://www.npmjs.com/package/dotenv
  4. *
  5. * Configure file updates with multer:
  6. * https://github.com/expressjs/multer
  7. *
  8. * Configure CORS for use with localhost.
  9. */
  10. require('dotenv').config()
  11. const { GraphQLServer } = require('graphql-yoga')
  12. const cookieParser = require('cookie-parser')
  13. const bodyParser = require('body-parser')
  14. const cors = require('cors')
  15. const express = require('express')
  16. const { merge } = require('lodash')
  17. const { db, populateUser } = require('./src/db')
  18. const { uploadMiddleware, handleFile } = require('./src/file')
  19. const { authenticate } = require('./src/authenticate')
  20. const prismaResolvers = require('./src/resolvers')
  21. const system = require('./src/system')
  22. const interfaces = require('./src/interfaces')
  23. const typeDefs = [
  24. './schema.graphql',
  25. system.typeDefs,
  26. interfaces.typeDefs
  27. ]
  28. const resolvers = merge(
  29. system.resolvers,
  30. interfaces.resolvers,
  31. prismaResolvers.resolvers
  32. )
  33. const server = new GraphQLServer({
  34. typeDefs,
  35. resolvers,
  36. context: req => ({
  37. ...req,
  38. db,
  39. debug: true
  40. })
  41. })
  42. server.express.use(cookieParser())
  43. server.express.use(bodyParser.json())
  44. server.express.use(authenticate)
  45. server.express.use(populateUser)
  46. server.express.use(cors({ origin: process.env.FRONTEND_URL, credentials: true }))
  47. server.express.use('/static', express.static('static'))
  48. server.express.post('/upload', uploadMiddleware.single('file'), handleFile)
  49. server.start(
  50. {
  51. cors: {
  52. credentials: true,
  53. origin: process.env.FRONTEND_URL
  54. }
  55. },
  56. server => console.log(`Server is running on http://localhost:${server.port}`)
  57. )