68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
import './console.mjs'
|
|
import config from './config/index.mjs'
|
|
|
|
// modules > native
|
|
import p from 'path'
|
|
|
|
// modules > 3rd party
|
|
import _ from 'lodash'
|
|
import chalk from 'chalk'
|
|
import express from 'express'
|
|
|
|
// modules > express middlewares
|
|
import bodyParser from 'body-parser'
|
|
|
|
// modules > midwest
|
|
import ensureFound from 'midwest/middleware/ensure-found.js'
|
|
import errorHandler from 'midwest/factories/error-handler.js'
|
|
import responder from 'midwest/middleware/responder.js'
|
|
import Morgan from 'morgan'
|
|
|
|
import apiRouter from './routers/api.mjs'
|
|
import publicRouter from './routers/index.mjs'
|
|
|
|
const server = express()
|
|
|
|
// get IP & whatnot from nginx proxy
|
|
server.set('trust proxy', true)
|
|
|
|
_.extend(server.locals, {
|
|
site: config.site,
|
|
})
|
|
|
|
// override default response render method for
|
|
// more convenient use with marko
|
|
server.response.render = function (_master, template) {
|
|
const locals = Object.assign({ query: this.req.query }, this.app.locals, this.locals)
|
|
|
|
this.send(template(locals))
|
|
}
|
|
|
|
if (config.env.NODE_ENV === 'development') {
|
|
// only log requests to console in development mode
|
|
server.use(Morgan('dev'))
|
|
}
|
|
|
|
server.use([
|
|
express.static(config.dir.dist, config.env.NODE_ENV === 'production' ? { maxAge: '1 year' } : null),
|
|
express.static(config.dir.static, config.env.NODE_ENV === 'production' ? { maxAge: '1 year' } : null),
|
|
bodyParser.json(),
|
|
bodyParser.urlencoded({ extended: true }),
|
|
])
|
|
|
|
// mount routers
|
|
server.use(publicRouter)
|
|
server.use('/api', apiRouter)
|
|
|
|
server.use([
|
|
ensureFound,
|
|
// transform and log error
|
|
errorHandler(config.errorHandler),
|
|
// respond
|
|
responder,
|
|
])
|
|
|
|
// Only start Express server when it is the main module (ie not required by test)
|
|
|
|
export default server
|