const express = require('express'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const methodOverride = require('method-override'); const cors = require('cors'); const compression = require('compression'); const squel = require('squel'); const libs = `${process.cwd()}/libs`; const log = require(`${libs}/log`)(module); process.env.NODE_ENV = process.env.NODE_ENV || 'development'; const config = require(`${libs}/config`); const cache = require('apicache').options({ debug: config.get('debug') }).middleware; const app = express(); const api = require(`${libs}/routes/api`); const mongoose = require(`${libs}/db/mongoose`); const db = mongoose(); // Set default node environment // Parse json received in requests app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); // Enable Cross-Origin Resource Sharing (CORS) app.use(cors()); app.use(methodOverride()); // Enable cache for 1 day app.use(cache('1 day')); // Enable maximum compression app.use(compression(9)); // Middleware tha adds the squel object to req app.use((req, res, next) => { req.sql = squel.select(); next(); }); app.use('/api/v1', api); // Catch 404 and forward to error handler app.use((req, res, next) => { res.status(404); log.debug('%s %d %s', req.method, res.statusCode, req.url); res.json({ error: 'Not found' }).end(); }); // Error handlers app.use((err, req, res, next) => { res.status(err.status || 500); log.error('%s %d %s', req.method, res.statusCode, err.message); res.json({ error: err.message }).end(); }); module.exports = app;