:::: MENU ::::

Ce qu’il faut savoir pour migrer de expressJs 3.x vers expressJs 4

Si vous utilisez le framework expressJs pour héberger vos belles applications Web sous nodejs, une nouvelle version est dans les tuyaux depuis quelques jours, il s’agit de la V4. Attention cependant avant de faire une mise à jour, il y a quelques changements à prévoir.

expressJS

La configuration, à la poubelle

app.configure n’est plus disponible , une configuration spécifique ou une logique de routage dépendante d’un environnement par exemple sera désormais à configurer dans l’application.

// server.js (Express 3.0)
app.configure('development', function() {
   ...
});

 

// server.js (Express 4.0)
var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
   ...
}

Du module en veux tu en voila

Comme c’est la mode en ce moment, expressJs n’échappe pas à la règle du tout module et la plupart des composants du framework sont maintenant externalisés. Il faut donc les spécifier explicitement.

// server.js (Express 3.0)
var express = require('express');
app  = express();

app.configure(function(){
app.use(express.compress());
app.use(express.static(config.serveur.publicDir, { maxAge: 2592000000 }));
app.use(express.urlencoded());
app.use(express.json());
app.use(express.methodOverride());
});

 

// server.js (Express 4.0)
var express = require("express"),
compress = require("compression"),
bodyParser = require("body-parser"),
methodOverride = require("method-override"),
app     = express();
...

app.use(compress());

app.use(express.static(config.serveur.publicDir, { maxAge: 2592000000 }));
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
app.use(methodOverride());

Pour aider, la liste des modules et leur équivalent https://github.com/senchalabs/connect#middleware

Le routage

Voila pour les changements qui vont planter votre application à coup sur, mais il y a une nouveauté majeure dans express qui concerne le routage. Si l’ancienne méthode est toujours supportée ( app. »verb » ) , expressJs 4 introduit un nouveau système qui permet de mieux séparer ses routes en créant des groupes isolés comme une instance de routage indépendante, ouch! Enfait c’est simple  :

app.route('/users')
.get(function(req, res, next) {})
.post(function(req, res, next) {})

route retourne une instance de Route et peut donc être chainée. On peut aller plus loin en créant un module de routage indépendant :

var people = express.Router();

people.use(function(req, res, next) {
});

people.get('/', function(req, res, next) {
});

module.exports.people = people;

Et l’appeler ainsi :

app.use('/people', require('./routes/people').people);

Tout ça dans le but d’isoler son code ce qui apporte lisibilité, maintenabilité …bref de la bonne pratique !

Pour conclure

n’hésitez pas à faire la mise à jour vers ExpressJs 4, les changements sont plutot rapide à mettre en place et cela permet par la suite de profiter des évolutions des modules qui possèdent leur propre vie indépendamment du cœur du framework. Pour aller plus loin : Changelog https://github.com/visionmedia/express/blob/master/History.md Features de la V4 https://github.com/visionmedia/express/wiki/New-features-in-4.x Les infos officielles de migration https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x Les docs de la V4 http://expressjs.com/4x/api.html


Comments are closed.