mirror of
https://github.com/roleypoly/roleypoly-v1.git
synced 2025-06-16 10:19:10 +00:00
v2: init -- UI is nuked from orbit, major app restructuring
This commit is contained in:
parent
c6f5b55c1c
commit
b8da886601
108 changed files with 6717 additions and 17430 deletions
91
index.js
Normal file
91
index.js
Normal file
|
@ -0,0 +1,91 @@
|
|||
require('dotenv').config({silent: true})
|
||||
const log = new (require('./logger'))('index')
|
||||
|
||||
const http = require('http')
|
||||
const Koa = require('koa')
|
||||
const app = new Koa()
|
||||
const _io = require('socket.io')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const router = require('koa-better-router')().loadMethods()
|
||||
const Roleypoly = require('./Roleypoly')
|
||||
const ksuid = require('ksuid')
|
||||
|
||||
// monkey patch async-reduce because F U T U R E
|
||||
Array.prototype.areduce = async function (predicate, acc = []) { // eslint-disable-line
|
||||
for (let i of this) {
|
||||
acc = await predicate(acc, i)
|
||||
}
|
||||
|
||||
return acc
|
||||
}
|
||||
|
||||
Array.prototype.filterNot = Array.prototype.filterNot || function (predicate) {
|
||||
return this.filter(v => !predicate(v))
|
||||
}
|
||||
|
||||
// Create the server and socket.io server
|
||||
const server = http.createServer(app.callback())
|
||||
const io = _io(server, { transports: ['websocket'], path: '/api/socket.io' })
|
||||
|
||||
|
||||
|
||||
const M = new Roleypoly(router, io, app) // eslint-disable-line no-unused-vars
|
||||
|
||||
app.keys = [ process.env.APP_KEY ]
|
||||
|
||||
const DEVEL = process.env.NODE_ENV === 'development'
|
||||
|
||||
async function start () {
|
||||
await M.awaitServices()
|
||||
|
||||
// body parser
|
||||
const bodyParser = require('koa-bodyparser')
|
||||
app.use(bodyParser({ types: ['json'] }))
|
||||
|
||||
// Compress
|
||||
const compress = require('koa-compress')
|
||||
app.use(compress())
|
||||
|
||||
// Request logger
|
||||
app.use(async (ctx, next) => {
|
||||
let timeStart = new Date()
|
||||
try {
|
||||
await next()
|
||||
} catch (e) {
|
||||
log.error(e)
|
||||
ctx.status = ctx.status || 500
|
||||
if (DEVEL) {
|
||||
ctx.body = ctx.body || e.stack
|
||||
} else {
|
||||
ctx.body = {
|
||||
err: 'something terrible happened.'
|
||||
}
|
||||
}
|
||||
}
|
||||
let timeElapsed = new Date() - timeStart
|
||||
|
||||
log.request(`${ctx.status} ${ctx.method} ${ctx.url} - ${ctx.ip} - took ${timeElapsed}ms`)
|
||||
// return null
|
||||
})
|
||||
|
||||
const session = require('koa-session')
|
||||
app.use(session({
|
||||
key: 'roleypoly:sess',
|
||||
maxAge: 'session',
|
||||
siteOnly: true,
|
||||
store: M.ctx.sessions,
|
||||
genid: () => { return ksuid.randomSync().string }
|
||||
}, app))
|
||||
|
||||
await M.mountRoutes()
|
||||
|
||||
// SPA server
|
||||
|
||||
log.info(`starting HTTP server on ${process.env.APP_PORT || 6769}`)
|
||||
server.listen(process.env.APP_PORT || 6769)
|
||||
}
|
||||
|
||||
start().catch(e => {
|
||||
log.fatal('app failed to start', e)
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue