dflzm
Version:
x
69 lines (59 loc) • 1.9 kB
JavaScript
const Koa = require('koa')
const path = require('path')
const serve = require('koa-static')
const onerror = require('koa-onerror')
const cors = require('kcors')
const bodyParser = require('koa-bodyparser')
const Webpack = require('webpack')
const webpackMiddleware = require('koa-webpack')
// (node:59920) MaxListenersExceededWarning: \
// Possible EventEmitter memory leak detected. 11 uncaughtException listeners added. \
// Use emitter.setMaxListeners() to increase limit
// require('events').EventEmitter.prototype._maxListeners = 100
const webpackConfig = require('../build/webpack.config')
const appConfig = require('../config/app')
const logger = require('../library/logger')
const rsp = require('../library/rsp')
const sql = require('../library/sql')
const router = require('../server/route')
const render = require('../library/render')
const app = new Koa()
const port = process.env.PORT || appConfig.port || 3040
if (process.env.NODE_ENV === 'wds') {
webpackMiddleware({
compiler: Webpack(webpackConfig),
config: webpackConfig,
})
.then((middleware) => {
app.use(middleware)
})
}
app.use(cors())
app.use(bodyParser({ extended: true }))
app.use(serve(path.resolve(__dirname, '../asset')))
app.use(async (ctx, next) => logger(ctx, next, app))
app.use(async (ctx, next) => sql(ctx, next, app))
app.use(async (ctx, next) => rsp(ctx, next, app))
app.use(router())
app.use(async (ctx, next) => {
if (ctx.path.match(/^\/api/)) {
const route = await router()(ctx, next)
return route
}
const rendering = await render(ctx, next)
return rendering
})
if (process.env.NODE_ENV === 'development') {
onerror(app)
}
app.on('error', (e, ctx) => ctx.logger.error(e))
if (process.env.NODE_ENV === 'test') {
module.exports = app.listen()
} else {
app.listen(
port,
() => {
console.log('Server run on: http://0.0.0.0:%d', port)
}
)
}