app.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /********** depend **************/
  2. var express = require('express');
  3. var exphbs = require('express-handlebars');
  4. var session = require('express-session');
  5. var flash = require('express-flash');
  6. var cookieParser = require('cookie-parser');
  7. var bodyParser = require('body-parser');
  8. var favicon = require('serve-favicon');
  9. var errorHandler = require('errorhandler');
  10. var events = require('events');
  11. var http = require('http');
  12. var path = require('path');
  13. var logger = require('morgan');
  14. var _ = require('lodash');
  15. var mongoose = require('mongoose');
  16. var MongoStore = require('connect-mongo')(session);
  17. var methodOverride = require('method-override');
  18. var passport = require('passport');
  19. var lusca = require('lusca');
  20. var expressValidator = require('express-validator');
  21. /********** Config **************/
  22. var app = express();
  23. var config = {
  24. development: require('./config/config-dev.js'),
  25. production: require('./config/config.js')
  26. };
  27. var secure = require('./config/secure');
  28. var passportConf = require('./config/passport');
  29. /********** MongoDB **************/
  30. mongoose.connect(secure.db);
  31. mongoose.connection.on('error', function() {
  32. console.log('MongoDB Connection Error!');
  33. process.exit(1);
  34. });
  35. /********** app.engine **************/
  36. app.engine('.hbs', exphbs({
  37. defaultLayout: 'main',
  38. extname: '.hbs',
  39. layoutsDir:'app/views/layouts',
  40. partialsDir:'app/views/partials'
  41. }));
  42. app.set('view engine', 'jade');
  43. app.set('views', path.join(__dirname, 'app/views'));
  44. /********** app.use **************/
  45. app.use(express.static(path.join(__dirname, 'app'), { maxAge: 31557600000 }));
  46. app.use(favicon(path.join(__dirname, 'app/img', 'favicon.png')));
  47. app.use(bodyParser.json());
  48. app.use(bodyParser.urlencoded({ extended: true }));
  49. app.use(expressValidator());
  50. app.use(methodOverride());
  51. app.use(cookieParser());
  52. app.use(session({
  53. resave: true,
  54. saveUninitialized: true,
  55. secret: secure.sessionSecret,
  56. store: new MongoStore({ url: secure.db, autoReconnect: true })
  57. }));
  58. app.use(passport.initialize());
  59. app.use(passport.session());
  60. app.use(flash());
  61. app.use(lusca({
  62. csrf: true,
  63. xframe: 'SAMEORIGIN',
  64. xssProtection: true
  65. }));
  66. app.use(function(req, res, next) {
  67. res.locals.user = req.user;
  68. next();
  69. });
  70. app.use(function(req, res, next) {
  71. if (/api/i.test(req.path)) {
  72. req.session.returnTo = req.path;
  73. }
  74. next();
  75. });
  76. /********** app controllers **************/
  77. var homeController = require('./controllers/home');
  78. var userController = require('./controllers/user');
  79. var contactController = require('./controllers/contact');
  80. app.get('/', homeController.index);
  81. app.get('/login', userController.getLogin);
  82. app.post('/login', userController.postLogin);
  83. app.get('/logout', userController.logout);
  84. app.get('/forgot', userController.getForgot);
  85. app.post('/forgot', userController.postForgot);
  86. app.get('/reset/:token', userController.getReset);
  87. app.post('/reset/:token', userController.postReset);
  88. app.get('/register', userController.getSignup);
  89. app.post('/register', userController.postSignup);
  90. app.get('/contact', contactController.getContact);
  91. app.post('/contact', contactController.postContact);
  92. app.get('/account', passportConf.isAuthenticated, userController.getAccount);
  93. app.post('/account/profile', passportConf.isAuthenticated, userController.postUpdateProfile);
  94. app.post('/account/password', passportConf.isAuthenticated, userController.postUpdatePassword);
  95. app.post('/account/delete', passportConf.isAuthenticated, userController.postDeleteAccount);
  96. app.get('/account/unlink/:provider', passportConf.isAuthenticated, userController.getOauthUnlink);
  97. //app.get('/contact', contactController.getContact);
  98. //app.post('/contact', contactController.postContact);
  99. /************* log **************/
  100. var logger = new events.EventEmitter();
  101. logger.on('newEvent', function(event, data) {
  102. console.log('%s: %s', event, JSON.stringify(data));
  103. });
  104. /************* errors **************/
  105. app.use(errorHandler());
  106. /********** app.listen **************/
  107. app.listen(conf.port), function() {
  108. console.log('listening on port %d in %s mode', app.get('port'), app.get('env'));
  109. }
  110. module.exports = app;