Pour le moment, voici ce qui se trouve en dessous de tous mes autres itinéraires:
app.get('*', function(req, res){
console.log('404ing');
res.render('404');
});
Et selon les journaux, il est déclenché même lorsque la route est mise en correspondance ci-dessus. Comment puis-je l'obtenir uniquement lorsque rien ne correspond?
Vous avez juste besoin de le mettre à la fin de tout itinéraire.
Jetez un coup d’œil au deuxième exemple de Passing Route Control :
var express = require('express')
, app = express.createServer();
var users = [{ name: 'tj' }];
app.all('/user/:id/:op?', function(req, res, next){
req.user = users[req.params.id];
if (req.user) {
next();
} else {
next(new Error('cannot find user ' + req.params.id));
}
});
app.get('/user/:id', function(req, res){
res.send('viewing ' + req.user.name);
});
app.get('/user/:id/edit', function(req, res){
res.send('editing ' + req.user.name);
});
app.put('/user/:id', function(req, res){
res.send('updating ' + req.user.name);
});
app.get('*', function(req, res){
res.send('what???', 404);
});
app.listen(3000);
Sinon, vous ne pouvez rien faire car tous les itinéraires qui ne correspondent pas produiront un 404. Vous pouvez ensuite utiliser ce code pour afficher le bon modèle:
app.error(function(err, req, res, next){
if (err instanceof NotFound) {
res.render('404.jade');
} else {
next(err);
}
});
C'est documenté dans Error Handling .
Je parie que votre navigateur répond à une demande pour le favicon. C'est pourquoi vous voyez le 404 dans vos journaux après le succès de 200 pour la page demandée.
Configurez un itinéraire favicon.
Je voulais un piège qui rendrait ma page 404 uniquement sur les routes manquantes et je l'ai trouvé ici dans la documentation sur la gestion des erreurs https://expressjs.com/fr/guide/error-handling.html
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(404).render('404.ejs')
})
Cela a fonctionné pour moi.
J'espère que ça m'aide, j'ai utilisé ce code en bas des routes
router.use((req, res, next) => {
next({
status: 404,
message: 'Not Found',
});
});
router.use((err, req, res, next) => {
if (err.status === 404) {
return res.status(400).render('404');
}
if (err.status === 500) {
return res.status(500).render('500');
}
next();
});