index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. const quickMiddleware = (req, res, next) => {
  11. if (
  12. req.body &&
  13. req.body.operationName &&
  14. req.body.operationName !== 'IntrospectionQuery' &&
  15. req.body.variables &&
  16. req.body.query
  17. ) {
  18. console.log(req.body.operationName, req.body.variables)
  19. }
  20. next()
  21. }
  22. require('dotenv').config()
  23. const { GraphQLServer } = require('graphql-yoga')
  24. const cookieParser = require('cookie-parser')
  25. const bodyParser = require('body-parser')
  26. const cors = require('cors')
  27. const express = require('express')
  28. const { merge } = require('lodash')
  29. const { db, populateUser } = require('./src/db')
  30. const { uploadMiddleware, handleFile } = require('./src/file')
  31. const { authenticate } = require('./src/authenticate')
  32. const prismaResolvers = require('./src/resolvers')
  33. const system = require('./src/system')
  34. const interfaces = require('./src/interfaces')
  35. const typeDefs = ['./schema.graphql', system.typeDefs, interfaces.typeDefs]
  36. const resolvers = merge(
  37. system.resolvers,
  38. interfaces.resolvers,
  39. prismaResolvers.resolvers
  40. )
  41. const server = new GraphQLServer({
  42. typeDefs,
  43. resolvers,
  44. context: req => ({
  45. ...req,
  46. db,
  47. debug: true
  48. })
  49. })
  50. server.express.use(cookieParser())
  51. server.express.use(bodyParser.json())
  52. server.express.use(quickMiddleware)
  53. server.express.use(authenticate)
  54. server.express.use(populateUser)
  55. server.express.use(
  56. cors({ origin: process.env.FRONTEND_URL, credentials: true })
  57. )
  58. server.express.use('/static', express.static('static'))
  59. server.express.post('/upload', uploadMiddleware.single('file'), handleFile)
  60. server.start(
  61. {
  62. cors: {
  63. credentials: true,
  64. origin: process.env.FRONTEND_URL
  65. }
  66. },
  67. server => console.log(`Server is running on http://localhost:${server.port}`)
  68. )