index.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 fileUpload = require('express-fileupload')
  13. const jwt = require('jsonwebtoken')
  14. const cookieParser = require('cookie-parser')
  15. const { resolvers } = require('./src/resolvers')
  16. const { db } = require('./src/db')
  17. const server = new GraphQLServer({
  18. typeDefs: './schema.graphql',
  19. resolvers,
  20. context: req => ({
  21. ...req,
  22. db,
  23. debug: true
  24. })
  25. })
  26. server.express.use(cookieParser())
  27. server.express.use((req, res, next) => {
  28. const { token } = req.cookies
  29. if (token) {
  30. const { userId } = jwt.verify(token, process.env.APP_SECRET)
  31. req.userId = userId
  32. }
  33. next()
  34. })
  35. server.express.use(async (req, res, next) => {
  36. if (!req.userId) return next()
  37. const user = await db.query.user(
  38. { where: { id: req.userId } },
  39. '{id, email, name}'
  40. )
  41. req.user = user
  42. next()
  43. })
  44. server.express.use(fileUpload())
  45. server.express.post('/upload', (req, res) => {
  46. console.log(req.files)
  47. })
  48. server.start(
  49. {
  50. cors: {
  51. credentials: true,
  52. origin: process.env.FRONTEND_URL
  53. }
  54. },
  55. server => console.log(`Server is running on http://localhost:${server.port}`)
  56. )