From c9d641e2bcddce80492943269e449c4f8e4737cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20B=C3=A9langer?= Date: Thu, 10 Apr 2014 22:26:41 -0400 Subject: [PATCH] Migration to Express 4.x Please see the Express documentation for details. connect-mongo NPM package is currently broken with Express 4.x. Use this fix in the meantime: https://github.com/kcbanner/connect-mongo/issues/103#issuecomment-400800 50 . --- app/routes/articles.js | 13 +++-- app/routes/core.js | 3 +- config/express.js | 53 +++++++++---------- package.json | 117 ++++++++++++++++++++++------------------- 4 files changed, 99 insertions(+), 87 deletions(-) diff --git a/app/routes/articles.js b/app/routes/articles.js index c0d39095..5275dfbe 100644 --- a/app/routes/articles.js +++ b/app/routes/articles.js @@ -7,11 +7,14 @@ var users = require('../../app/controllers/users'), articles = require('../../app/controllers/articles'); module.exports = function(app) { - // Article Routes - app.get('/articles', articles.list); - app.post('/articles', users.requiresLogin, articles.create); - app.get('/articles/:articleId', articles.read); - app.put('/articles/:articleId', users.requiresLogin, articles.hasAuthorization, articles.update); + // Article Routes, using express 4.x syntax + app.route('/articles') + .get(articles.list) + .post(users.requiresLogin, articles.create); + + app.route('/articles/:articleId') + .get(articles.read) + .put(users.requiresLogin, articles.hasAuthorization, articles.update); app.del('/articles/:articleId', users.requiresLogin, articles.hasAuthorization, articles.delete); // Finish by binding the article middleware diff --git a/app/routes/core.js b/app/routes/core.js index ba232004..adc051f4 100644 --- a/app/routes/core.js +++ b/app/routes/core.js @@ -3,5 +3,6 @@ module.exports = function(app) { // Root routing var core = require('../../app/controllers/core'); - app.get('/', core.index); + app.route('/') + .get(core.index); }; \ No newline at end of file diff --git a/config/express.js b/config/express.js index d83ee8fb..99c01e91 100755 --- a/config/express.js +++ b/config/express.js @@ -4,8 +4,14 @@ * Module dependencies. */ var express = require('express'), + morgan = require('morgan'), + bodyParser = require('body-parser'), + session = require('express-session'), + compress = require('compression'), + methodOverride = require('method-override'), + cookieParser = require('cookie-parser'), passport = require('passport'), - mongoStore = require('connect-mongo')(express), + mongoStore = require('connect-mongo')(session), flash = require('connect-flash'), config = require('./config'), consolidate = require('consolidate'), @@ -22,14 +28,12 @@ module.exports = function(db) { }); // Setting the environment locals - app.locals({ - title: config.app.title, - description: config.app.description, - keywords: config.app.keywords, - facebookAppId: config.facebook.clientID, - modulesJSFiles: utilities.walk('./public/modules', /(.*)\.(js)/, /(.*)\.(spec.js)/, './public'), - modulesCSSFiles: utilities.walk('./public/modules', /(.*)\.(css)/, null, './public') - }); + app.locals.title = config.app.title; + app.locals.description = config.app.description; + app.locals.keywords = config.app.keywords; + app.locals.facebookAppId = config.facebook.clientID; + app.locals.modulesJSFiles = utilities.walk('./public/modules', /(.*)\.(js)/, /(.*)\.(spec.js)/, './public'); + app.locals.modulesCSSFiles = utilities.walk('./public/modules', /(.*)\.(css)/, null, './public'); // Passing the request url to environment locals app.use(function(req, res, next) { @@ -38,7 +42,7 @@ module.exports = function(db) { }); // Should be placed before express.static - app.use(express.compress({ + app.use(compress({ filter: function(req, res) { return (/json|text|javascript|css/).test(res.getHeader('Content-Type')); }, @@ -55,35 +59,33 @@ module.exports = function(db) { app.set('view engine', 'html'); app.set('views', config.root + '/app/views'); - // Application Configuration for development environment - app.configure('development', function() { - // Enable logger - app.use(express.logger('dev')); + // Environment dependent middleware + if (process.env.NODE_ENV === 'development'){ + // Enable logger (morgan) + app.use(morgan('dev')); // Disable views cache app.set('view cache', false); - }); - - // Application Configuration for production environment - app.configure('production', function() { + } else if (process.env.NODE_ENV === 'production'){ app.locals({ cache: 'memory' // To solve SWIG Cache Issues }); - }); + } + // request body parsing middleware should be above methodOverride - app.use(express.urlencoded()); - app.use(express.json()); - app.use(express.methodOverride()); + app.use(bodyParser.urlencoded()); + app.use(bodyParser.json()); + app.use(methodOverride()); // Enable jsonp app.enable('jsonp callback'); // cookieParser should be above session - app.use(express.cookieParser()); + app.use(cookieParser()); // express/mongo session storage - app.use(express.session({ + app.use(session({ secret: config.sessionSecret, store: new mongoStore({ db: db.connection.db, @@ -98,9 +100,6 @@ module.exports = function(db) { // connect flash for flash messages app.use(flash()); - // routes should be at the last - app.use(app.router); - // Setting the app router and static folder app.use(express.static(config.root + '/public')); diff --git a/package.json b/package.json index 52695071..dbafac23 100755 --- a/package.json +++ b/package.json @@ -1,56 +1,65 @@ { - "name": "meanjs", - "description": "Full-Stack JavaScript with MongoDB, Express, AngularJS, and Node.js.", - "version": "0.2.2", - "private": false, - "author": "https://github.com/meanjs/mean/graphs/contributors", - "repository": { - "type": "git", - "url": "https://github.com/meanjs/mean.git" - }, - "engines": { - "node": "0.10.x", - "npm": "1.4.x" - }, - "scripts": { - "start": "grunt", - "test": "grunt test", - "postinstall": "bower install --config.interactive=false" - }, - "dependencies": { - "express": "~3.5.1", - "consolidate": "~0.10.0", - "swig": "~1.3.2", - "mongoose": "~3.8.8", - "connect-mongo": "~0.4.0", - "connect-flash": "~0.1.1", - "passport": "~0.2.0", - "passport-local": "~1.0.0", - "passport-facebook": "~1.0.2", - "passport-twitter": "~1.0.2", - "passport-linkedin": "~0.1.3", - "passport-google-oauth": "~0.1.5", - "lodash": "~2.4.1", - "forever": "~0.10.11", - "bower": "~1.3.1", - "grunt-cli": "~0.1.13" - }, - "devDependencies": { - "supertest": "~0.10.0", - "should": "~3.2.0", - "grunt-env": "~0.4.1", - "grunt-node-inspector": "~0.1.3", - "grunt-contrib-watch": "~0.6.1", - "grunt-contrib-jshint": "~0.10.0", - "grunt-nodemon": "~0.2.0", - "grunt-concurrent": "~0.5.0", - "grunt-mocha-test": "~0.10.0", - "grunt-karma": "~0.8.2", - "karma": "~0.12.0", - "karma-jasmine": "~0.2.1", - "karma-coverage": "~0.2.0", - "karma-chrome-launcher": "~0.1.2", - "karma-firefox-launcher": "~0.1.3", - "karma-phantomjs-launcher": "~0.1.2" - } + "name": "meanjs", + "description": "Full-Stack JavaScript with MongoDB, Express, AngularJS, and Node.js.", + "version": "0.2.3", + "private": false, + "author": "https://github.com/meanjs/mean/graphs/contributors", + "repository": { + "type": "git", + "url": "https://github.com/meanjs/mean.git" + }, + "engines": { + "node": "0.10.x", + "npm": "1.4.x" + }, + "scripts": { + "start": "grunt", + "test": "grunt test", + "postinstall": "bower install --config.interactive=false" + }, + "dependencies": { + "body-parser": "^1.0.1", + "bower": "~1.3.1", + "compression": "^1.0.1", + "connect-flash": "~0.1.1", + "connect-mongo": "mrzepinski/connect-mongo#2135988", + "consolidate": "~0.10.0", + "cookie-parser": "^1.0.1", + "express": "4.x", + "express-session": "^1.0.2", + "forever": "~0.10.11", + "grunt-cli": "~0.1.13", + "grunt-mocha-test": "^0.10.2", + "karma-jasmine": "^0.2.2", + "lodash": "~2.4.1", + "method-override": "^1.0.0", + "mongoose": "~3.8.8", + "morgan": "^1.0.0", + "passport": "~0.2.0", + "passport-facebook": "~1.0.2", + "passport-google-oauth": "~0.1.5", + "passport-linkedin": "~0.1.3", + "passport-local": "~1.0.0", + "passport-twitter": "~1.0.2", + "should": "^3.2.0", + "swig": "~1.3.2" + }, + "devDependencies": { + "supertest": "~0.10.0", + "should": "~3.2.0", + "grunt-env": "~0.4.1", + "grunt-node-inspector": "~0.1.3", + "grunt-contrib-watch": "~0.6.1", + "grunt-contrib-jshint": "~0.10.0", + "grunt-nodemon": "~0.2.0", + "grunt-concurrent": "~0.5.0", + "grunt-mocha-test": "~0.10.0", + "grunt-karma": "~0.8.2", + "karma": "~0.12.0", + "karma-jasmine": "~0.2.1", + "karma-coverage": "~0.2.0", + "karma-chrome-launcher": "~0.1.2", + "karma-firefox-launcher": "~0.1.3", + "karma-phantomjs-launcher": "~0.1.2" + } } \ No newline at end of file