2013-04-03 4 views
0

J'ai un gestionnaire d'erreur personnalisé dans mon application express. La configuration:Le gestionnaire d'erreurs inconnu inconnu enregistre les erreurs personnalisées

app.use(Routes.error); 
app.use(express.static(__dirname + '/assets')); 
app.use(express.cookieParser(config.app.sessionSecret)); 
app.use(express.bodyParser()); 
app.use(express.session({ 
    cookie: { 
     maxAge: 60000 
    } 
})); 
app.use(flashify); 
app.use(expressValidator); 
app.use(app.router); 

Le routeur d'erreur:

error: function(err, req, res, next) { 
    res.render('error.jade', { 
     error: err.message 
    }, function(renderError, html) { 
     if (renderError) { 
      res.send(500, 'Error while displaying the error template!'); 
     } else { 
      res.send(err.code, html); 
     } 
    }); 
}, 

Le problème que j'ai est qu'un message d'erreur personnalisé est enregistré dans la console:

//In the route 
next(new NotFoundError('Could not find the template!')); 

//Custom error 
var NotFoundError = function(message) { 
this.code = 404; 
this.message = message; 
}; 

util.inherits(NotFoundError, Error); 
NotFoundError.name = 'NotFoundError'; 

Ceci est très inquiétant au cours de la Tests unitaires:

✔ server - testTemplateCreate 
Error: Could not find the template! 
✔ server - testTemplateEdit 

Il est correct que le modèle n'a pas pu être trouvé, mais je ne veux pas que le message soit affiché. Je pensais que si vous fournissiez une route d'erreur personnalisée, aucune fonction d'erreur native n'est utilisée.

Répondre

1

L'ordre dans lequel vous installez le middleware est important.

Vous déclarez votre gestionnaire d'erreurs tout en haut, ce qui signifie que tout middleware et routes suivant sa déclaration ne seront pas gérés par lui. Au lieu de cela, déplacez votre gestionnaire d'erreur après le routeur:

... 
app.use(app.router); 
app.use(Routes.error); 
+0

Merci, cela a fonctionné! J'ai déjà lu que l'ordre compte et a changé certaines parties de celui-ci, mais je ne pensais pas que vous deviez mettre le routage d'erreur derrière le routeur normaler. – Tim