UNPKG

shunter

Version:

A Node.js application built to read JSON and translate it into HTML

74 lines (62 loc) 2.03 kB
'use strict'; module.exports = function(config) { var connect = require('connect'); var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser'); var serveStatic = require('serve-static'); var query = require('qs-middleware'); var app = connect(); var benchmark = require('./benchmark')(config); var renderer = require('./renderer')(config); var processor = require('./processor')(config, renderer); renderer.initDustExtensions(); renderer.compileTemplates(); if (config.env.isDevelopment()) { renderer.watchTemplates(); renderer.watchDustExtensions(); } app.use(benchmark); app.use(query({ allowDots: false })); app.use(cookieParser()); app.use(config.web.tests, serveStatic(config.path.tests)); if (config.env.isProduction()) { app.use(config.web.public, serveStatic(config.path.public, { maxAge: 1000 * 60 * 60 * 24 * 365 })); } else { app.use(config.web.resources, renderer.assetServer()); } config.middleware.forEach(function(args) { app.use.apply(app, args); }); app.use('/ping', processor.ping); app.use('/template', bodyParser.json({limit: config.argv['max-post-size']})); app.use('/template', processor.api); app.use(processor.timestamp); app.use(processor.shunterVersion); app.use(processor.intercept); app.use(processor.proxy); app.listen(config.argv.port, function() { config.log.info('Worker process ' + process.pid + ' started in ' + config.env.name + ' mode, listening on port ' + config.argv.port); }); process.on('uncaughtException', function(err) { if (err.code === 'EADDRINUSE') { config.log.error('Worker process ' + process.pid + ' died, something is already listening on port ' + config.argv.port); // exit with status 0, so server doesn't attempt to respawn process.exit(0); } else { config.log.error(err); process.exit(1); } }); process.on('message', function(msg) { if (msg === 'force exit') { process.exit(0); } }); process.on('disconnect', function() { process.exit(0); }); };