Questa traduzione fornita da StrongLoop / IBM.
È possibile che questo documento non sia aggiornato poiché la documentazione è in inglese. Per gli ultimi aggiornamenti, fare riferimento alla documentazione in inglese.Express 4 è stato modificato rispetto a Express 3. Ciò significa che un’applicazione Express 3 esistente non funzionerà se si aggiornano le dipendenze della versione Express.
Argomenti di questo articolo:
Sono state apportate diverse modifiche importanti alla versione Express 4:
Consultare inoltre:
Express 4 non dipende più da Connect e non ha più il middleware integrato nel core,
ad eccezione della funzione express.static
. Ciò significa che ora
Express è un framework web middleware e routing indipendente
i release e le versioni di Express non vengono influenzate dagli aggiornamenti middleware.
Senza un middleware integrato, è necessario aggiungere esplicitamente tutto il middleware richiesto per eseguire l’applicazione. Seguire semplicemente questi passaggi:
npm install --save <module-name>
require('module-name')
app.use( ... )
La seguente tabella elenca il middleware Express 3 e le relative controparti in 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 |
Segue l’elenco completo di middleware Express 4.
In molti casi, è possibile semplicemente sostituire il middleware della versione 3 meno recente con la relativa controparte Express 4. Per dettagli, consultare la documentazione del modulo in GitHub.
app.use
accetta i parametriNella versione 4 è possibile utilizzare un parametro di variabile per definire il percorso in cui vengono caricate le funzioni middleware, quindi leggere il valore del parametro dal programma di gestione route. Ad esempio:
app.use('/book/:id', function(req, res, next) {
console.log('ID:', req.params.id);
next();
});
Le applicazioni ora sono in grado di caricare il middleware di routing, pertanto non sarà più necessario
pensare all’ordine in cui è caricato il middleware rispetto al middleware
router
.
Il modo in cui viene definita la route non è cambiato ma il sistema di routing dispone di due nuove funzioni utili per organizzare le route:
app.route()
, per creare handler di route a catena per un percorso route.express.Router
, per creare handler di route assemblabili in modo modulare.app.route()
Il nuovo metodo app.route()
consente di creare handler di route a catena
per un percorso route. Poiché il percorso è specificato in una singola ubicazione, la creazione di route modulari è utile, poiché riduce le possibilità di riscontrare errori tipografici e di ridondanza. Per ulteriori informazioni
sulle route, consultare la documentazione Router()
.
Segue un esempio di handler di route a catena definiti utilizzando la funzione 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’altra funzione che risulta utile per organizzare le route in una nuova classe,
express.Router
, che è possibile utilizzare per creare handler di route assemblabili in modo modulare. Un’istanza Router
è un sistema di routing e middleware completo;
per questo motivo spesso viene fatto riferimento a questo come “mini-app”.
Nel seguente esempio si crea un router come modulo, si carica il middleware all’interno di esso, si definiscono alcune route e si caricano su un percorso nell’applicazione principale.
Ad esempio, creare un file router denominato birds.js
nella directory dell’applicazione,
con i seguenti contenuti:
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;
Successivamente, caricare il modulo router nell’applicazione:
var birds = require('./birds');
...
app.use('/birds', birds);
L’applicazione sarà ora in grado di gestire le richieste per i percorsi /birds
e
/birds/about
e chiamerà il middleware timeLog
specifico per la route.
La seguente tabella elenca altre piccole ma importanti modifiche applicate a Express 4:
Oggetto | Descrizione |
---|---|
Node.js | Express 4 richiede Node.js 0.10.x o versione successiva e non esiste più supporto per Node.js 0.8.x. |
|
Il modulo |
|
La funzione |
|
La proprietà dell’applicazione |
|
Utilizzare |
|
Non risolve più le URL relative. |
|
Era un array; ora è un oggetto. |
|
Era una funzione; ora è un oggetto. |
|
Modificato in |
|
Ora disponibile come |
|
Rimosso. |
|
Rimosso. |
|
La funzionalità ora è limitata alla sola impostazione del valore cookie di base. Utilizzare
|
Segue un esempio di migrazione dell’applicazione da Express 3 a Express 4.
I file da considerare sono app.js
e package.json
.
app.js
Prendere in considerazione l’applicazione Express v.3 con il seguente file app.js
:
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 ('development' == app.get('env')) {
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
Il file package.json
della versione 3 associata deve
apparire come segue:
{
"name": "application-name",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.12.0",
"pug": "*"
}
}
Iniziare il processo di migrazione installando il middleware richiesto per l’applicazione Express 4 e aggiornando Express e Pug alla versione aggiornata con il seguente comando:
$ npm install serve-favicon morgan method-override express-session body-parser multer errorhandler express@latest pug@latest --save
Apportare le seguenti modifiche a app.js
:
Le funzioni middleware di Express integrate express.favicon
,
express.logger
, express.methodOverride
,
express.session
, express.bodyParser
e
express.errorHandler
non sono più disponibili nell’oggetto
express
. È necessario installare le funzioni alternative
manualmente e caricarle sull’applicazione.
Non è più necessario caricare la funzione app.router
.
Non è un oggetto applicazione Express 4 valido, pertanto rimuovere il codice
app.use(app.router);
.
Assicurarsi che le funzioni middleware siano state caricate nell’ordine corretto - caricare errorHandler
dopo aver caricato le route dell’applicazione.
package.json
L’esecuzione del comando npm
aggiornerà package.json
come segue:
{
"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
Successivamente, rimuovere il codice non valido, caricare il middleware richiesto e apportare le modifiche
necessarie. Il file app.js
apparirà come segue:
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(__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 ('development' == app.get('env')) {
app.use(errorHandler());
}
var server = http.createServer(app);
server.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
A meno che non sia necessario gestire direttamente il modulo http
(socket.io/SPDY/HTTPS), il relativo caricamento non è richiesto e l’applicazione può essere avviata semplicemente come segue:
app.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
Il processo di migrazione è stato completato e ora l’applicazione è stata aggiornata a Express 4. Per confermare, avviare l’applicazione utilizzando il seguente comando:
$ node .
Caricare http://localhost:3000 e visualizzare la home page sottoposta a rendering da Express 4.
Lo strumento della riga comandi per generare un’applicazione Express è sempre
express
ma per effettuare l’aggiornamento alla nuova versione è necessario disinstallare
il programma di creazione dell’applicazione di Express 3 e successivamente installare il nuovo
express-generator
.
Se il programma di creazione dell’applicazione di Express 3 è già installato sul sistema, è necessario disinstallarlo:
$ npm uninstall -g express
A seconda di come sono configurati i privilegi del file e della directory,
potrebbe essere necessario eseguire questo comando con sudo
.
Ora, installare il nuovo programma di creazione:
$ npm install -g express-generator
A seconda di come sono configurati i privilegi del file e della directory,
potrebbe essere necessario eseguire questo comando con sudo
.
Ora, il comando express
sul sistema è aggiornato al programma di creazione
di Express 4.
L’utilizzo e le opzioni del comando sono rimaste quasi gli stessi, con le seguenti eccezioni:
--sessions
.--jshtml
.--hogan
per supportare Hogan.js.Eseguire il seguente comando per creare un’applicazione Express 4:
$ express app4
Se si visualizzano i contenuti del file app4/app.js
, si noterà che tutte le funzioni
middleware (ad eccezione di express.static
) richieste per l’applicazione,
sono caricate come moduli indipendenti e il middleware router
non viene più caricato in modo esplicito sull’applicazione.
Si noterà inoltre che il file app.js
è ora un modulo Node.js, diversamente dall’applicazione autonoma che era stata generate dal vecchio programma di creazione.
Dopo aver installato le dipendenze, avviare l’applicazione utilizzando il seguente comando:
$ npm start
Se si visualizza lo script di avvio npm nel file package.json
,
si noterà che il comando effettivo che avvia l’applicazione è
node ./bin/www
, il quale era node app.js
in Express 3.
Poiché il file app.js
generato dal programma di creazione di Express 4
è ora un modulo Node.js, non può essere più avviato individualmente come un’applicazione
(a meno che non venga modificato il codice). Il modulo deve essere caricato in un file Node.js
e avviato tramite il file Node.js. Il file Node.js è ./bin/www
in questo caso.
La directory bin
e il file senza estensione www
non sono obbligatori per la creazione di un’applicazione Express o per avviare l’applicazione. Sono solo consigli
creati dal programma di creazione, pertanto è possibile modificarli a seconda delle
necessità.
Per rimuovere la directory www
e conservare le cose “come farebbe Express 3”,
cancellare la riga in cui viene riportata la dicitura module.exports = app;
alla fine del file
app.js
, quindi incollare il seguente codice al proprio posto:
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
Assicurarsi di caricare il modulo debug
all’inizio del file app.js
utilizzando il seguente codice:
var debug = require('debug')('app4');
Successivamente, modificare "start": "node ./bin/www"
nel file package.json
in "start": "node app.js"
.
È stata spostata la funzionalità di ./bin/www
di nuovo in
app.js
. Questa modifica non è consigliata, ma questa prova consente di comprendere in che modo funziona
il file ./bin/www
e perché il file app.js
non si avvia più in modo autonomo.