Skip to content

Instantly share code, notes, and snippets.

@Industrial
Created May 27, 2017 00:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Industrial/d8aac22753252cc706b2d91efc54997f to your computer and use it in GitHub Desktop.
Save Industrial/d8aac22753252cc706b2d91efc54997f to your computer and use it in GitHub Desktop.
const Koa = require('koa')
const next = require('next')
const Router = require('koa-router')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare()
.then(() => {
const server = new Koa()
const router = new Router()
router.get('/a', async ctx => {
await app.render(ctx.req, ctx.res, '/b', ctx.query)
ctx.respond = false
})
router.get('/b', async ctx => {
await app.render(ctx.req, ctx.res, '/a', ctx.query)
ctx.respond = false
})
router.get('*', async ctx => {
await handle(ctx.req, ctx.res)
ctx.respond = false
})
server.use(async (ctx, next) => {
ctx.res.statusCode = 200
await next()
})
server.use(router.routes())
server.listen(3000, (err) => {
if (err) throw err
console.log('> Ready on http://localhost:3000')
})
})
const zlib = require('zlib')
const Koa = require('koa')
const Router = require('koa-router')
const koaBodyparser = require('koa-bodyparser')
const koaCompress = require('koa-compress')
const koaConvert = require('koa-convert')
const koaErrorHandler = require('koa-errorhandler')
const koaHelmet = require('koa-helmet')
const koaLogger = require('koa-logger')
const koaPassport = require('koa-passport')
const koaPing = require('koa-ping')
const koaRedis = require('koa-redis')
const koaResponseTime = require('koa-response-time')
const koaSession = require('koa-generic-session')
const koaStatic = require('koa-static')
const log = require('loglevel')
const next = require('next')
const {
NODE_ENV,
REDIS_HOST,
REDIS_PORT,
APP_HOST,
APP_PORT,
APP_KEYS,
} = process.env
if (NODE_ENV === 'develop') {
log.setLevel('debug')
}
const nextApp = next({
dev: process.env.NODE_ENV !== 'production',
})
const handleRequest = nextApp.getRequestHandler()
nextApp
.prepare()
.then(() => {
const router = new Router()
router.get('*', (ctx) => {
handleRequest(ctx.req, ctx.res)
ctx.respond = false
})
const app = new Koa()
app.keys = [APP_KEYS.split(',')]
// Hook to convert old Koa.js middleware
const oldUse = app.use
app.use = x => oldUse.call(app, koaConvert(x))
app
.use(koaPing())
.use(koaLogger())
.use(koaErrorHandler())
.use(koaBodyparser())
.use(koaSession({
rolling: true,
store: koaRedis({
host: REDIS_HOST,
port: REDIS_PORT,
}),
}))
.use(koaCompress({
filter: contentType => /text/i.test(contentType),
threshold: 2048,
flush: zlib.Z_SYNC_FLUSH,
}))
.use(koaStatic(`${__dirname}/static`))
.use(koaHelmet())
.use(koaResponseTime())
.use(async (ctx, next) => {
ctx.res.statusCode = 200
await next()
})
.use(router.routes())
.listen(APP_PORT, APP_HOST, (error) => {
if (error) {
throw error
}
log.info(`> Ready on http://${APP_HOST}:${APP_PORT}`)
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment