-
-
Save Industrial/d8aac22753252cc706b2d91efc54997f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') | |
}) | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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