nopasteonlybin

server.ts

Dec 4th, 2023
1,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TypeScript 2.21 KB | Source Code | 0 0
  1. import http from 'http'
  2. import express from 'express'
  3. import * as dotenv from 'dotenv'
  4. import { Server } from 'socket.io'
  5. import { initRoutes } from './routes.js'
  6. import { initSocketIO } from './socket.js'
  7. import { corsWithOptions } from './config/corsOptions.js'
  8. import multer from 'multer'
  9. import { PrismaClient } from '@prisma/client'
  10. import expressSession from 'express-session'
  11. import { PrismaSessionStore } from '@quixo3/prisma-session-store'
  12.  
  13. dotenv.config()
  14.  
  15. if (
  16.     !process.env.PORT ||
  17.     !process.env.CLIENT_URL ||
  18.     !process.env.SESSION_SECRET ||
  19.     !process.env.UPLOADTHING_SECRET ||
  20.     !process.env.UPLOADTHING_APP_ID ||
  21.     !process.env.DATABASE_URL
  22. )
  23.     throw new Error('Environment variable(s) missing.')
  24.  
  25. const ONE_DAY = 1000 * 60 * 60 * 24
  26. const PORT = process.env.PORT
  27. const app = express()
  28. export const prisma = new PrismaClient()
  29. const session = expressSession({
  30.     secret: process.env.SESSION_SECRET,
  31.     resave: false,
  32.     saveUninitialized: true,
  33.     cookie: { maxAge: 1000 * 60 * 5, secure: false, httpOnly: false },
  34.     // process.env.NODE_ENV === 'production'
  35.     // ? { maxAge: ONE_DAY, secure: true, sameSite: 'none' }
  36.     // : { maxAge: 1000 * 60 * 5, httpOnly: false, sameSite: 'none', secure: false },
  37.     store: new PrismaSessionStore(prisma, {
  38.         dbRecordIdIsSessionId: true,
  39.         dbRecordIdFunction: undefined,
  40.         checkPeriod: ONE_DAY * 2,
  41.     }),
  42. })
  43. // app.set('trust proxy', 1)
  44.  
  45. const server = http.createServer(app)
  46. const io = new Server(server, {
  47.     cors: {
  48.         origin:
  49.             process.env.NODE_ENV === 'production'
  50.                 ? [process.env.CLIENT_URL]
  51.                 : [process.env.CLIENT_URL, 'http://localhost:4173'],
  52.     },
  53. })
  54.  
  55. export const media = multer().single('upload')
  56.  
  57. // if (app.settings.env === 'production') app.use(reqLogger) // only run this code if app is running in production.
  58. // app.use(isAuth)
  59. app.use(session)
  60. app.use(corsWithOptions())
  61. app.use(express.json()) // for parsing application/json
  62. app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
  63.  
  64. initRoutes(app)
  65. initSocketIO(io)
  66.  
  67. server.listen(PORT, () => console.log('Server started on port', PORT))
  68.  
Advertisement
Add Comment
Please, Sign In to add comment