Sto costruendo un sito Web di esempio utilizzando Express e ho trovato qualcosa che non capisco.
Il middleware (i) di gestione degli errori dovrebbe essere l'ultimo (i) nella pipeline, se ho capito bene. Ad esempio, funziona bene:Il middleware di gestione degli errori non funziona sempre
var http = require('http');
var express = require('express');
var app = express();
app.set('view engine', 'jade');
app.set('views', './views');
app.use(express.static('./public'));
http.createServer(app).listen(portNumber, function() { });
app.get('/hello', function(req, res) {
res.send('Welcome!');
});
app.use(function(err, req, res, next) {
res.status(500).send('something broke!');
});
app.get('/error', function(req, res, next) {
somethingNonExistent(2016);
});
Tuttavia, se mi registro che middleware prima http.createServer chiamata, ma dopo sono stati registrati tutti gli altri middleware, non funzionerà - il mio codice non è chiamato:
var http = require('http');
var express = require('express');
var app = express();
app.use(express.static('./public'));
app.use(function(err, req, res, next) {
res.status(500).send('something broke!');
});
http.createServer(app).listen(portNumber, function() { });
app.get('/hello', function(req, res) {
res.send('Welcome!');
});
app.get('/error', function(req, res, next) {
somethingNonExistent(2016);
});
Cosa mi sono perso qui? La mia ipotesi è che le chiamate app.get utilizzino internamente qualche middleware e questo si incasina.
ho utilizzare Express 3.2.6 e Node.js 0.10.29, se questo fa alcuna differenza
Si prega di commentare i downvotes – chester89
Non sono sicuro dei downvotes, ma quello che mi ha impedito di prendere tempo per rispondere è il codice extra irrilevante. Il modo migliore per ottenere una risposta è pubblicare il caso d'uso più semplicistico che riesci a trovare, non pubblicare l'intera app. A nessuno piace molto il debug, tanto meno il debugging del codice di qualcun altro. Non è necessario il logging della console per la console, l'impostazione delle configurazioni dell'ambiente, la matematica per calcolare la durata di un giorno, ecc. 'Var app = express(); app.use (qualcosa); app.get ("/ ciao", ...);/* il tuo tentativo di gestione degli errori */' – cdbajorin
@cdbajorin punto preso. Aggiornerò il post – chester89