61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import express from 'express'
|
|
import createError from 'http-errors'
|
|
import path from 'path'
|
|
import bodyParser from 'body-parser'
|
|
import cookieParser from 'cookie-parser'
|
|
|
|
let instance = null
|
|
|
|
class Server {
|
|
constructor () {
|
|
if (!instance) { instance = this }
|
|
|
|
this.createApp()
|
|
this.setupAppOptions()
|
|
this.setupAppRoutes()
|
|
this.setupAppErrors()
|
|
return instance
|
|
}
|
|
|
|
createApp = () => {
|
|
this.app = express()
|
|
this.app.use(express.json())
|
|
this.app.use(express.urlencoded({ extended: false }))
|
|
this.app.use(cookieParser())
|
|
this.app.use(express.static('./build'))
|
|
this.app.use(bodyParser.json())
|
|
|
|
}
|
|
|
|
setupAppErrors = () => {
|
|
this.app.use((request, response, next) => {
|
|
next(createError(404))
|
|
})
|
|
|
|
this.app.use((error, request, response, next) => {
|
|
response.locals.message = error.message
|
|
response.locals.error = request.app.get('env') === 'development' ? error : {}
|
|
|
|
response.status(error.status || 500)
|
|
response.send('error')
|
|
})
|
|
}
|
|
|
|
setupAppRoutes = () => {
|
|
const __dirname = path.resolve()
|
|
this.app.get('*', (request, response, next) => {
|
|
response.sendFile(path.join(__dirname, '/build/index.html'))
|
|
})
|
|
}
|
|
|
|
setupAppOptions = () => {
|
|
this.app.use((request, response, next) => {
|
|
response.header('Access-Control-Allow-Origin', request.headers.origin || '*')
|
|
response.header('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,HEAD,DELETE,OPTIONS')
|
|
response.header('Access-Control-Allow-Headers', 'Content-Type,x-requested-with')
|
|
next()
|
|
})
|
|
}
|
|
}
|
|
|
|
export default Server |