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