diff --git a/.gitignore b/.gitignore index 9db5e29..af1c3b9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ public/ node_modules/ bower_components/ +package-lock.json diff --git a/Gruntfile.js b/Gruntfile.js index 59888a2..58b273a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -89,10 +89,9 @@ module.exports = function(grunt) { copy: { main: { files: [ - { expand: true, cwd: 'resources/assets/fonts', src: ['**'], dest: 'public/assets/fonts' }, - { expand: true, cwd: 'bower_components/font-awesome/fonts', src: ['**'], dest: 'public/assets/fonts' }, - { expand: true, cwd: 'bower_components/bootstrap/dist', src: ['**'], dest: 'public/assets/bootstrap' }, - { expand: true, flatten: true, cwd: 'bower_components/', src: ['**/*.min.js', '**/*.min.js.map'], dest: 'public/assets/js', filter: 'isFile' } + { expand: true, cwd: 'resources/assets/fonts', src: ['**'], dest: 'public/assets/fonts' }, + { expand: true, cwd: 'bower_components/font-awesome/fonts', src: ['**'], dest: 'public/assets/fonts' }, + { expand: true, cwd: 'bower_components/bootstrap/dist', src: ['**'], dest: 'public/assets/bootstrap' } ] } } @@ -103,5 +102,6 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-sass'); grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.registerTask('default', ['browserify', 'uglify', 'sass', 'copy', 'watch']); + grunt.registerTask('default', ['browserify', 'sass', 'copy', 'watch']); + grunt.registerTask('prod', ['browserify', 'uglify', 'sass', 'copy', 'watch']); }; diff --git a/app.js b/app.js index 51fa214..f1c973b 100644 --- a/app.js +++ b/app.js @@ -1,22 +1,44 @@ 'use strict'; var express = require('express'), + ENV = require('node-env-file')(__dirname + '/.env'), // Load .env in the root directory of the this project app = express(); -// Load environment properties from a .env file for local development -require('dotenv').load({ silent: true }); +// Get environment properties from a .env file for local development +app.ENV = ENV; +// Get port in .env or else use default port `3000` +app.ENV.NODE_PORT = app.ENV.NODE_PORT || 3000; -// Views +// If the development is for testing purpose or development. Use 'local' +if (app.ENV.NODE_DEVELOPMENT === 'local') { + app.ENV.NODE_URL += ':' + app.ENV.NODE_PORT; +} + +// Gzip compression +require('./config/lib/compress')(app); + +// Libraries for client-side +app.use('/bower_components', express.static(__dirname + '/bower_components')); +// Assets app.use('/public', express.static(__dirname + '/public')); +// HTML Files app.use('/views', express.static(__dirname + '/resources/views')); +// Helpers that can be use globally in the server require('./config/lib/helpers'); +// This library uses req.body for requests like POST method, etc. require('./config/lib/body-parser')(app); +// This library uses for security purposes like session, crsf, passport, and helmet. require('./config/lib/middleware')(app); +// Set csrf token in cookie require('./config/lib/csrf')(app); +// Centralized error handler require('./config/lib/handler')(app); +// Database configuration require('./config/lib/mongoose')(app); +// Set of routes in an application require('./config/lib/routes')(app); +// Passport configuration require('./config/lib/passport')(app); module.exports = app; diff --git a/config/lib/compress.js b/config/lib/compress.js new file mode 100644 index 0000000..7461c79 --- /dev/null +++ b/config/lib/compress.js @@ -0,0 +1,16 @@ +'use strict'; + +var compression = require('compression'); + +module.exports = function (app) { + /* GZIP Compression */ + app.use(compression({ filter: shouldCompress })); +}; + +function shouldCompress(req, res) { + if (req.headers['x-no-compression']) { + return false; + } + + return compression.filter(req, res); +} diff --git a/config/lib/passport.js b/config/lib/passport.js index eecc72e..c8e48a7 100644 --- a/config/lib/passport.js +++ b/config/lib/passport.js @@ -23,8 +23,8 @@ module.exports = function (app) { }, function (email, password, done) { User.findOne({ email: email }, function (err, user) { if (err) { return done(err); } - if ( ! user) { return done(null, false); } - if ( ! user.verifyPassword(password)) { return done(null, false); } + if (!user) { return done(null, false); } + if (!user.verifyPassword(password)) { return done(null, false); } return done(null, user); }); })); diff --git a/package.json b/package.json index f5c2f6c..8d8ba47 100644 --- a/package.json +++ b/package.json @@ -13,16 +13,19 @@ ], "dependencies": { "body-parser": "^1.15.2", + "compression": "^1.6.2", "cookie-parser": "^1.4.3", "csurf": "^1.9.0", - "dotenv": "^2.0.0", "express": "^4.14.0", "express-session": "^1.14.2", "helmet": "^3.1.0", "method-override": "^2.3.7", "mongoose": "^4.7.0", + "mongoose-paginate": "^5.0.3", + "node-env-file": "^0.1.8", "passport": "^0.3.2", "passport-local": "^1.0.0", + "request": "^2.81.0", "socket.io": "^1.7.1", "tmj-passport": "^1.0.0" }, diff --git a/server.js b/server.js index 477dbca..ecbc464 100644 --- a/server.js +++ b/server.js @@ -9,5 +9,6 @@ io.on('connection', function(socket) { // TODO: Socket }); -server.listen(port); -console.log('Node development server started on ' + process.env.NODE_URL + ':' + port + '/'); +server.listen(port, function () { + console.log('Node development server started on ' + app.ENV.NODE_URL); +});