express.js 1.78 KB
const express = require('express');
const glob = require('glob');

const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const compress = require('compression');
const methodOverride = require('method-override');
const nunjucks = require('nunjucks');
const helmet = require('helmet');

const log = require('./log');
const db = require('./db');

module.exports = function(app, config) {
  const env = process.env.NODE_ENV || 'development';
  const routes = require('../app/routes/index.js');
  const controllers = glob.sync(config.root + '/app/controllers/*.js');

  app.locals.ENV = env;
  app.locals.ENV_DEVELOPMENT = env == 'development';

  app.set('views', config.root + '/app/views');
  app.set('view engine', 'nunjucks');
  nunjucks.configure(config.root + '/app/views', {
      autoescape: true,
      express: app
  });

  db.init(config.database);

  // app.use(favicon(config.root + '/public/img/favicon.ico'));
  app.use(logger('dev'));
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({
    extended: true
  }));
  app.use(cookieParser());
  app.use(compress());
  app.use(helmet());
  app.use(express.static(config.root + '/public'));
  app.use(methodOverride());
  app.use('/', routes);

  app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
  });

  if(app.get('env') === 'development'){
    app.use(function (err, req, res, next) {
      res.status(err.status || 500);
      res.render('error', {
        message: err.message,
        error: err,
        title: 'error'
      });
    });
  }

  app.use(function (err, req, res, next) {
    log.error(err);
    res.status(err.status || 500);
    res.json(err);
  });


};