Je ne connais pas de fonction pour ce faire, quelqu'un en connaît-il une?
203
J'ai trouvé cet exemple très utile:
https://github.com/visionmedia/express/blob/master/examples/error-pages/index.js
C'est donc en fait cette partie:
// "app.router" positions our routes
// above the middleware defined below,
// this means that Express will attempt
// to match & call routes _before_ continuing
// on, at which point we assume it's a 404 because
// no route has handled the request.
app.use(app.router);
// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.
// $ curl http://localhost:3000/notfound
// $ curl http://localhost:3000/notfound -H "Accept: application/json"
// $ curl http://localhost:3000/notfound -H "Accept: text/plain"
app.use(function(req, res, next){
res.status(404);
// respond with html page
if (req.accepts('html')) {
res.render('404', { url: req.url });
return;
}
// respond with json
if (req.accepts('json')) {
res.send({ error: 'Not found' });
return;
}
// default to plain-text. send()
res.type('txt').send('Not found');
});
app.router
est désormais obsolète. Voir github.com/strongloop/express/wiki/…res.json
place deres.send()
. Ils se comporteraient de la même manière dans votre code, mais l'utilisationres.json
fera de la magie dans la conversion automatique des objets en chaînes où.send()
ils ne le seront pas. Mieux vaut prévenir que guérir. expressjs.com/api.html#res.jsonJe pense que vous devez d'abord définir tous vos itinéraires et comme dernier itinéraire ajouter
Un exemple d'application qui fonctionne:
app.js:
la source
app.get('/public/*', function(req, res){ res.sendfile(__dirname + '/public/' + req.url); })
vous pouvez utiliser cette route pour envoyer des fichiers statiques. cela fonctionne très bien avec l'itinéraire "*" ci-dessus.app.use(express.static(__dirname + '/public'));
ne fonctionne pas pour moi, filaire.app.use(express.static(...))
venu aprèsapp.use(app.router)
. Une fois que je les ai échangés, tout s'est bien passé.Vous pouvez placer un middleware à la dernière position qui génère une
NotFound
erreur,ou même afficher directement la page 404:
la source
use()
vous rendreapp.router
à la dernière fois. (comme dans mon cas)GET
s). EssayezPOST
une URL aléatoire avec l'autre méthode; il renverra la valeur par défautCannot POST...
. Un attaquant saurait alors que vous utilisez Express.JS.res.render('404')
Les réponses ci-dessus sont bonnes, mais dans la moitié d'entre elles, vous n'obtiendrez pas 404 comme votre code d'état HTTP est retourné et dans l'autre moitié, vous ne pourrez pas avoir un rendu de modèle personnalisé. La meilleure façon d'avoir une page d'erreur personnalisée (404) dans Expressjs est
Placez ce code à la fin de tous vos mappages d'URL.
la source
À la dernière ligne de app.js, mettez simplement cette fonction. Cela remplacera la page d'erreur par défaut de page introuvable:
Il remplacera toutes les demandes qui n'ont pas de gestionnaire valide et affichera votre propre page d'erreur.
la source
La réponse à votre question est:
Et il y a un excellent article sur pourquoi c'est le meilleur moyen ici .
la source
send
etend
?send
express-error-handler vous permet de spécifier des modèles personnalisés, des pages statiques ou des gestionnaires d'erreurs pour vos erreurs. Il fait également d'autres choses utiles pour la gestion des erreurs que chaque application devrait implémenter, comme se protéger contre les attaques DOS d'erreur 4xx, et l'arrêt gracieux des erreurs irrécupérables. Voici comment vous faites ce que vous demandez:
Ou pour un gestionnaire personnalisé:
Ou pour une vue personnalisée:
la source
Dans certains cas, la page 404 ne peut pas être écrite pour être exécutée en tant que dernier itinéraire, en particulier si vous disposez d'une fonction de routage asynchrone qui introduit un / route en retard pour le correspondant. Le schéma ci-dessous pourrait être adopté dans ces cas.
la source
https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js
C'est ce que fait le nœud-passe-partout.
la source
la source
La façon la plus simple de le faire est d'avoir un catch all pour la page d'erreur
ensuite
Vous pouvez maintenant stocker toutes vos pages "html" (y compris une page d'erreur "html") dans une variable
Maintenant, vous appelez simplement les pages à l'aide de la méthode Get et vous avez tout pour tous les itinéraires non disponibles pour les diriger vers votre page d'erreur en utilisant app.get ("*")
N'oubliez pas de configurer un port et d'écouter le serveur:
Cela devrait maintenant afficher votre page d'erreur pour tous les points de terminaison non reconnus!
la source
Bien que les réponses ci-dessus soient correctes, pour ceux qui souhaitent que cela fonctionne dans IISNODE, vous devez également spécifier
dans votre web.config (sinon IIS mangera votre sortie).
la source
vous pouvez gérer les erreurs en fonction du type de contenu
En outre, la gestion selon le code d'état.
app.js
404.jade
Si vous pouvez utiliser res.format, vous pouvez écrire un code de gestion d'erreur simple.
Recommandation
res.format()
au lieu deres.accepts()
.Si l'erreur 500 se produit dans le code précédent,
if(500 == err.status){. . . }
est appeléela source
Salut s'il te plait trouve la réponse
la source
Si vous utilisez un package de générateur express:
suivant (err);
Ce code vous envoie au middleware 404.
la source
Pour envoyer vers une page personnalisée:
la source
J'ai utilisé le gestionnaire ci-dessous pour gérer l'erreur 404 avec un
.ejs
fichier statique .Mettez ce code dans un script de route, puis exigez-
file.js
leapp.use()
dans votreapp.js
/server.js
/www.js
(si vous utilisez IntelliJ pour NodeJS)Vous pouvez également utiliser un
.html
fichier statique .De cette façon, le serveur express en cours d'exécution répondra correctement
404 error
et votre site Web peut également inclure une page qui affiche correctement la réponse 404 du serveur. Vous pouvez également inclure unnavbar
en ce404 error template
qui renvoie à d'autres contenus importants de votre site Web.la source
Si vous souhaitez rediriger vers des pages d'erreur à partir de vos fonctions (itinéraires), procédez comme suit -
Ajoutez le code général des messages d'erreur dans votre app.js -
Dans votre fonction, au lieu d'utiliser une redirection de page d'erreur, vous pouvez d'abord définir le statut d'erreur, puis utiliser next () pour que le flux de code passe par le code ci-dessus -
la source
La page 404 doit être configurée juste avant l'appel à app.listen.Express prend en charge * dans les chemins d'itinéraire. Il s'agit d'un caractère spécial qui correspond à tout. Cela peut être utilisé pour créer un gestionnaire d'itinéraire qui correspond à toutes les demandes.
la source
Couverture de tous les verbes HTTP dans
express
Afin de couvrir tous les verbes HTTP et tous les chemins restants, vous pouvez utiliser:
La solution finale ressemblerait à ceci:
N'oubliez pas de mettre le routeur à la fin. Parce que l'ordre des routeurs est important.
la source
Le code ci-dessus n'a pas fonctionné pour moi.
J'ai donc trouvé une nouvelle solution qui fonctionne réellement!
Ou vous pouvez même le rendre sur une page 404.
J'espère que cela vous a aidé!
la source
la source