Cette traduction fournie par StrongLoop / IBM.
Il se peut que ce document soit obsolĂšte par rapport Ă la documentation en anglais. Pour connaĂźtre les mises Ă jour les plus rĂ©centes, reportez-vous Ă la documentation en anglais.Express 4 est un changement novateur dâExpress 3. Cela signifie quâune application Express 3 existante ne fonctionnera pas si vous mettez Ă jour la version Express dans les dĂ©pendances.
Cet article couvre :
De nombreuses modifications importantes ont été faites dans Express 4 :
Voir aussi :
Express 4 ne dépend plus de Connect, et supprime tous les middleware intégrés de son noyau, sauf la fonction express.static
. Cela signifie quâExpress
est désormais un canevas Web de routage et de middleware indépendant et que les versions et
Ă©ditions dâExpress ne sont pas affectĂ©es par les mises Ă jour de middleware.
Sans middleware intégré, vous devez explicitement ajouter tous les middleware requis pour exécuter votre application. Procédez comme suit :
npm install --save <module-name>
require('module-name')
app.use( ... )
La table suivante répertorie le middelware Express 3 et ces équivalents dans Express 4.
Express 3 | Express 4 |
---|---|
express.bodyParser |
body-parser + multer |
express.compress |
compression |
express.cookieSession |
cookie-session |
express.cookieParser |
cookie-parser |
express.logger |
morgan |
express.session |
express-session |
express.favicon |
serve-favicon |
express.responseTime |
response-time |
express.errorHandler |
errorhandler |
express.methodOverride |
method-override |
express.timeout |
connect-timeout |
express.vhost |
vhost |
express.csrf |
csurf |
express.directory |
serve-index |
express.static |
serve-static |
Vous trouverez ici la liste complĂšte du middleware Express 4.
Dans la plupart des cas, il vous suffit de remplacer lâancienne version du middelware 3 par son Ă©quivalent Express 4. Pour plus dâinformations, consultez la documentation relative au module dans GitHub.
app.use
accepte les paramÚtresDans la version 4 vous pouvez utilisez un paramÚtre variable pour définir le chemin vers lequel les fonctions middleware sont chargées, puis lire la valeur de ce paramÚtre dans le gestionnaire de routage. Par exemple :
app.use('/book/:id', function (req, res, next) {
console.log('ID:', req.params.id)
next()
})
Les applications chargent dorĂ©navant les middleware de routage de maniĂšre implicite, ce qui fait que vous nâavez plus Ă vous
soucier de lâordre dans lequel les middleware sont chargĂ©s par rapport au middleware router
.
La façon de dĂ©finir des routes nâa pas changĂ© mais le systĂšme de routage possĂšde deux nouvelles fonctions pour vous aider Ă organiser vos routes :
app.route()
, permettant de créer des gestionnaires de routage sous forme de chaßne pour un chemin de routage.express.Router
, permettant de crĂ©er des gestionnaires de routage modulaires pouvant ĂȘtre montĂ©s.app.route()
La nouvelle méthode app.route()
vous permet de crĂ©er des gestionnaires de routage sous forme de chaĂźne pour un chemin de routage. Etant donnĂ© que le chemin est spĂ©cifiĂ© Ă une seul emplacement, la crĂ©ation de routes modulaires est utile car elle rĂ©duit la redondance et les erreurs. Pour plus dâinformations sur les routes, voir la documentation Router()
.
Voici quelques exemples de gestionnaires de chemin de chaĂźnage dĂ©finis Ă lâaide de la fonction app.route()
.
app.route('/book')
.get(function (req, res) {
res.send('Get a random book')
})
.post(function (req, res) {
res.send('Add a book')
})
.put(function (req, res) {
res.send('Update the book')
})
express.Router
Lâautre fonction qui aide Ă organiser les routes est une nouvelle classe,
express.Router
, que vous pouvez utiliser pour crĂ©er des gestionnaires de routage modulaires pouvant ĂȘtre
montés. Une instance Router
est un middleware et un systĂšme de routage complet ; pour cette raison, elle est souvent appelĂ©e âmini-appâ.
Lâexemple suivant crĂ©Ă© une routeur en tant que module, charge un middleware dans celui-ci, dĂ©finit des routes et monte le module sur un chemin dans lâapplication principale.
Par exemple, créez un fichier de routage nommé birds.js
dans le répertoire app, avec le contenu suivant :
var express = require('express')
var router = express.Router()
// middleware specific to this router
router.use(function timeLog (req, res, next) {
console.log('Time: ', Date.now())
next()
})
// define the home page route
router.get('/', function (req, res) {
res.send('Birds home page')
})
// define the about route
router.get('/about', function (req, res) {
res.send('About birds')
})
module.exports = router
Puis, chargez le module de routage dans lâapplication :
var birds = require('./birds')
/// ...
app.use('/birds', birds)
Lâapplication pourra gĂ©rer des demandes dans les chemins /birds
et
/birds/about
, et appellera le middleware timeLog
spécifique à la route.
Le tableau suivant répertorie les autres modifications mineures mais importantes dans Express 4 :
Objet | Description |
---|---|
Node.js | Express 4 nécessite Node.js 0.10.x ou ultérieur et a abandonné la prise en charge de Node.js 0.8.x. |
|
Le module |
|
La fonction |
|
La propriĂ©tĂ© dâapplication |
|
Use |
|
Ne résout plus les adresses URL relatives. |
|
Anciennement un tableau ; il sâagit dorĂ©navant dâun objet. |
|
Anciennement une fonction ; il sâagit dorĂ©navant dâun objet. |
|
A été modifié en |
|
Dorénavant disponible comme |
|
Supprimé. |
|
Supprimé. |
|
Cette fonctionnalité se limite désormais à définir la valeur de cookie de base. Utilisez
|
Voici un exemple de migration dâune application Express 3 vers Express 4.
Les fichiers qui nous intéressent sont app.js
et package.json
.
app.js
Examinons une application Express v.3 avec le fichier app.js
suivant :
var express = require('express')
var routes = require('./routes')
var user = require('./routes/user')
var http = require('http')
var path = require('path')
var app = express()
// all environments
app.set('port', process.env.PORT || 3000)
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')
app.use(express.favicon())
app.use(express.logger('dev'))
app.use(express.methodOverride())
app.use(express.session({ secret: 'your secret here' }))
app.use(express.bodyParser())
app.use(app.router)
app.use(express.static(path.join(__dirname, 'public')))
// development only
if (app.get('env') === 'development') {
app.use(express.errorHandler())
}
app.get('/', routes.index)
app.get('/users', user.list)
http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'))
})
package.json
Voici Ă quoi ressemble le fichier package.json
qui accompagne la version 3 :
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.12.0",
"pug": "*"
}
}
Commencez le processus de migration en installant le middleware requis pour lâapplication Express 4 et en mettant Ă jour Express et Pug vers leur version la plus rĂ©cente respective Ă lâaide de la commande suivante :
$ npm install serve-favicon morgan method-override express-session body-parser multer errorhandler express@latest pug@latest --save
Apportez les modifications suivantes Ă app.js
:
Les fonctions Express Middleware intégrées express.favicon
,
express.logger
, express.methodOverride
,
express.session
, express.bodyParser
et
express.errorHandler
ne sont plus disponibles sur lâobjet
express
. Vous devez installer leurs fonctions alternatives
manuellement et les charger dans lâapplication.
Vous ne devez plus charger la fonction app.router
.
Il ne sâagit pas dâun objet dâapplication Express 4 valide. Supprimez le code
app.use(app.router);
.
Assurez-vous que les fonctions middleware sont chargĂ©es dans lâordre correct - chargez errorHandler
aprĂšs avoir chargĂ© les routes dâapplication.
package.json
Le fait dâexĂ©cuter la commande npm
ci-dessus mettra Ă jour package.json
comme suit :
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"body-parser": "^1.5.2",
"errorhandler": "^1.1.1",
"express": "^4.8.0",
"express-session": "^1.7.2",
"pug": "^2.0.0-beta6",
"method-override": "^2.1.2",
"morgan": "^1.2.2",
"multer": "^0.1.3",
"serve-favicon": "^2.0.1"
}
}
app.js
Puis, supprimez le code non valide, chargez les middleware requis et procédez aux autres changements,
le cas échéant. Voici à quoi ressemble le fichier app.js
:
var http = require('http')
var express = require('express')
var routes = require('./routes')
var user = require('./routes/user')
var path = require('path')
var favicon = require('serve-favicon')
var logger = require('morgan')
var methodOverride = require('method-override')
var session = require('express-session')
var bodyParser = require('body-parser')
var multer = require('multer')
var errorHandler = require('errorhandler')
var app = express()
// all environments
app.set('port', process.env.PORT || 3000)
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')
app.use(favicon(path.join(__dirname, '/public/favicon.ico')))
app.use(logger('dev'))
app.use(methodOverride())
app.use(session({
resave: true,
saveUninitialized: true,
secret: 'uwotm8'
}))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(multer())
app.use(express.static(path.join(__dirname, 'public')))
app.get('/', routes.index)
app.get('/users', user.list)
// error handling middleware should be loaded after the loading the routes
if (app.get('env') === 'development') {
app.use(errorHandler())
}
var server = http.createServer(app)
server.listen(app.get('port'), () => {
console.log('Express server listening on port ' + app.get('port'))
})
A mois que vous deviez utiliser le module http
(socket.io/SPDY/HTTPS) directement, vous nâavez pas Ă le charger et lâapplication peut ĂȘtre dĂ©marrĂ©e comme suit :
app.listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'))
})
Le processus de migration est terminĂ© et lâapplication est dĂ©sormais une application Express 4. Pour confirmer, dĂ©marrez lâapplication en utilisant la commande suivante :
$ node .
Chargez http://localhost:3000 et voyez comment la page dâaccueil est gĂ©nĂ©rĂ©e par Express 4.
Lâoutil de ligne de commande qui permet de gĂ©nĂ©rer une application Express est toujours
express
, mais pour effectuer la mise à niveau vers la nouvelle version, vous devez désinstaller
le gĂ©nĂ©rateur dâapplications Express 3 puis installer la nouvelle version dâexpress-generator
.
Si le gĂ©nĂ©rateur dâapplications Express 3 est installĂ© sur votre systĂšme, vous devez le dĂ©sinstaller :
$ npm uninstall -g express
En fonction de la configuration de vos privilÚges de fichier et de répertoire,
vous devrez exécuter cette commande avec sudo
.A présent, installez le nouveau générateur :
$ npm install -g express-generator
En fonction de la configuration de vos privilÚges de fichier et de répertoire,
vous devrez exécuter cette commande avec sudo
.
DĂ©sormais, la commande express
sur votre systÚme est mise à jour vers le générateur Express 4.
Les options et les syntaxe de commande restent généralement identiques, avec les exceptions suivantes :
--sessions
a été supprimée.--jshtml
a été supprimée.--hogan
a été ajoutée à la prise en charge de Hogan.js.Exécutez la commande suivante pour créer une application Express 4 :
$ express app4
Si vous examinez le contenu du fichier app4/app.js
, vous remarquerez que toutes
les fonctions middleware (sauf express.static
) qui sont requises pour
lâapplication sont chargĂ©es en tant que modules indĂ©pendants, et le middleware router
nâest plus chargĂ©
explicitement dans lâapplication.
Vous noterez Ă©galement que le fichier app.js
est dĂ©sormais un module Node.js, contrairement Ă lâapplication autonome qui a Ă©tĂ© gĂ©nĂ©rĂ©e par lâancien gĂ©nĂ©rateur.
AprĂšs avoir installĂ© les dĂ©pendances, dĂ©marrez lâapplication en utilisant la commande suivante :
$ npm start
Si vous examinez le script de démarrage npm dans le fichier package.json
,
vous remarquerez dorĂ©navant que la commande qui dĂ©marre lâapplication est
node ./bin/www
alors quâil sâagissait de node app.js
dans Express 3.
Puisque le fichier app.js
qui a été généré par le générateur Express 4 est
dĂ©sormais un module Node.js, il ne peut plus ĂȘtre dĂ©marrĂ© indĂ©pendamment en tant quâapplication
(sauf si vous modifiez le code). Le module doit ĂȘtre chargĂ© dans un fichier Node.js et dĂ©marrĂ©
via le fichier Node.js. Dans cet exemple, le fichier Node.js est ./bin/www
.
Ni le répertoire bin
ni le fichier www
sans extension nâest obligatoire pour crĂ©er une application Express ou dĂ©marrer celle-ci. Ce ne sont ici que des suggestions faites par le gĂ©nĂ©rateur, donc nâhĂ©sitez pas Ă les modifier si besoin.
Pour se débarrasser du répertoire www
et garder la prĂ©sentation dâExpress 3,
supprimez la ligne module.exports = app;
Ă la fin du fichier
app.js
, puis collez le code suivant Ă la place :
app.set('port', process.env.PORT || 3000)
var server = app.listen(app.get('port'), function () {
debug('Express server listening on port ' + server.address().port)
})
Assurez-vous dâavoir chargĂ© le module debug
en haut du fichier app.js
Ă lâaide du code suivant :
var debug = require('debug')('app4')
Ensuite, modifiez "start": "node ./bin/www"
dans le fichier package.json
en "start": "node app.js"
.
Vous avez à présent déplacé la fonctionnalité depuis ./bin/www
de nouveau
dans app.js
. Cette modification nâest pas recommandĂ©e, mais lâexercice vous aide Ă comprendre le mode de fonctionnement
du fichier ./bin/www
et la raison pour laquelle le fichier app.js
ne se lance plus seul.