app.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * Module dependencies.
  3. */
  4. const cluster = require('cluster'),
  5. numCPUs = require('os').cpus().length,
  6. express = require('express'),
  7. async = require('async');
  8. const bodyParser = require('body-parser'),
  9. methodOverride = require('method-override'),
  10. errorHandler = require('errorhandler');
  11. if (cluster.isMaster) {
  12. // Fork workers.
  13. for (let i = 0; i < numCPUs; i++) {
  14. cluster.fork();
  15. }
  16. cluster.on('exit', (worker, code, signal) =>
  17. console.log('worker ' + worker.pid + ' died'));
  18. } else {
  19. const app = module.exports = express();
  20. // Configuration
  21. // https://github.com/expressjs/method-override#custom-logic
  22. app.use(bodyParser.urlencoded({ extended: true }));
  23. app.use(methodOverride((req, res) => {
  24. if (req.body && typeof req.body === 'object' && '_method' in req.body) {
  25. // look in urlencoded POST bodies and delete it
  26. const method = req.body._method;
  27. delete req.body._method;
  28. return method;
  29. }
  30. }));
  31. // Set headers for all routes
  32. app.use((req, res, next) => {
  33. res.setHeader("Server", "Express");
  34. return next();
  35. });
  36. app.set('view engine', 'jade');
  37. app.set('views', __dirname + '/views');
  38. // Check Node env.
  39. const env = process.env.NODE_ENV || 'development';
  40. if ('development' == env) {
  41. app.use(errorHandler({ dumpExceptions: true, showStack: true }));
  42. }
  43. if ('production' == env) {
  44. app.use(errorHandler());
  45. }
  46. // Routes
  47. app.get('/json', (req, res) => res.send({ message: 'Hello, World!' }));
  48. app.get('/plaintext', (req, res) =>
  49. res.header('Content-Type', 'text/plain').send('Hello, World!'));
  50. app.listen(8080);
  51. }