No conozco una función para hacer esto, ¿alguien sabe de una?
203
Encontré este ejemplo bastante útil:
https://github.com/visionmedia/express/blob/master/examples/error-pages/index.js
Entonces, en realidad es esta parte:
// "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
ahora está en desuso. Ver github.com/strongloop/express/wiki/…res.json
lugar deres.send()
. Se comportarían igual en su código, pero el usores.json
hará algo de magia en la conversión automática de objetos en cadenas donde.send()
no lo hará. Más vale prevenir que lamentar. expressjs.com/api.html#res.jsonCreo que primero debes definir todas tus rutas y como la última ruta agregar
Una aplicación de ejemplo que funciona:
app.js:
fuente
app.get('/public/*', function(req, res){ res.sendfile(__dirname + '/public/' + req.url); })
Puede utilizar esta ruta para enviar archivos estáticos. funciona bien con la ruta "*" anterior.app.use(express.static(__dirname + '/public'));
no funciona para mí, por cable.app.use(express.static(...))
vino despuésapp.use(app.router)
. Una vez que los cambié, todo salió bien.Puede colocar un middleware en la última posición que arroje un
NotFound
error,o incluso muestre la página 404 directamente:
fuente
use()
tuapp.router
en el último tiempo. (como en mi caso)GET
s). Intente conPOST
una URL aleatoria con el otro método; devolverá el valor predeterminadoCannot POST...
. Un atacante sabría que estás usando Express.JS.res.render('404')
Las respuestas anteriores son buenas, pero en la mitad de estas no obtendrá 404 cuando se devuelva su código de estado HTTP y en la otra mitad, no podrá tener una plantilla personalizada renderizada. La mejor manera de tener una página de error personalizada (404) en Expressjs es
Coloque este código al final de todas sus asignaciones de URL.
fuente
En la última línea de app.js simplemente pon esta función. Esto anulará la página de error predeterminada de página no encontrada:
Anulará todas las solicitudes que no tengan un controlador válido y generará su propia página de error.
fuente
La respuesta a tu pregunta es:
Y hay un gran artículo sobre por qué es la mejor manera aquí .
fuente
send
yend
?send
express-error-handler le permite especificar plantillas personalizadas, páginas estáticas o manejadores de errores para sus errores. También hace otras cosas útiles para el manejo de errores que toda aplicación debería implementar, como proteger contra los ataques de error 4xx de DOS y el apagado correcto de errores irrecuperables. Así es como haces lo que estás pidiendo:
O para un controlador personalizado:
O para una vista personalizada:
fuente
Hay algunos casos en los que la página 404 no se puede escribir para ejecutarse como la última ruta, especialmente si tiene una función de enrutamiento asíncrono que trae una ruta / tarde a la fiesta. El siguiente patrón podría adoptarse en esos casos.
fuente
https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js
Esto es lo que hace node-boilerplate.
fuente
fuente
La forma más fácil de hacerlo es tener un catch all para la página de error
Luego
Ahora puede almacenar todas sus páginas "html" (incluida una página de error "html") en una variable
Ahora simplemente llame a las páginas con el Método Get y obtenga una captura de todas las rutas que no estén disponibles para dirigirlas a su página de error usando app.get ("*")
No olvide configurar un puerto y escuchar el servidor:
¡Ahora debería mostrar su página de error para todos los puntos finales no reconocidos!
fuente
Si bien las respuestas anteriores son correctas, para aquellos que desean que esto funcione en IISNODE, también deben especificar
en su web.config (de lo contrario, IIS se comerá su salida).
fuente
puede cometer errores de acuerdo con el tipo de contenido
Además, manejo de acuerdo con el código de estado.
app.js
404.jade
Si puede usar res.format, puede escribir un código simple de manejo de errores.
Recomendación en
res.format()
lugar deres.accepts()
.Si el error 500 ocurre en el código anterior,
if(500 == err.status){. . . }
se llamafuente
Hola por favor encuentra la respuesta
fuente
Si usa el paquete express-generator:
siguiente (err);
Este código lo envía al middleware 404.
fuente
Para enviar a una página personalizada:
fuente
Usé el siguiente controlador para manejar el error 404 con un
.ejs
archivo estático .Pon este código en un script ruta y luego requerir que
file.js
a travésapp.use()
de suapp.js
/server.js
/www.js
(si se utiliza para IntelliJ NodeJS)También puedes usar un
.html
archivo estático .De esta manera, el servidor express en ejecución responderá con una respuesta adecuada
404 error
y su sitio web también puede incluir una página que muestre correctamente la respuesta 404 del servidor. También puede incluir unanavbar
en la que404 error template
que los enlaces a otros contenidos importantes de su sitio web.fuente
Si desea redirigir a páginas de error desde sus funciones (rutas), haga lo siguiente:
Agregue un código de mensaje de error general en su app.js -
En su función, en lugar de utilizar una redirección de página de error, puede establecer primero el estado del error y luego utilizar next () para que el flujo de código pase por el código anterior:
fuente
La página 404 debe configurarse justo antes de la llamada a app.listen.Express tiene soporte para * en rutas de ruta. Este es un personaje especial que coincide con cualquier cosa. Esto se puede usar para crear un controlador de ruta que coincida con todas las solicitudes.
fuente
Cubriendo todos los verbos HTTP en
express
Para cubrir todos los verbos HTTP y todas las rutas restantes, puede usar:
La solución final se vería así:
No debes olvidar poner el enrutador al final. Porque el orden de los enrutadores es importante.
fuente
El código anterior no funcionó para mí.
¡Así que encontré una nueva solución que realmente funciona!
O incluso puede representarlo en una página 404.
Espero que esto te haya ayudado!
fuente
fuente