Как перенаправить 404 ошибки на страницу в ExpressJS? - PullRequest
186 голосов
/ 30 июня 2011

Я не знаю функцию для этого, кто-нибудь знает одну?

Ответы [ 19 ]

2 голосов
/ 05 апреля 2017
// Add this middleware
// error handler
app.use(function(err, req, res, next) {
 // set locals, only providing error in development
   res.locals.message = err.message;
   res.locals.error = req.app.get('env') === 'development' ? err : {};

 // render the error page
   res.status(err.status || 500);
   res.render('error');
  });
1 голос
/ 07 марта 2019

Привет, пожалуйста, найдите ответ

const express = require('express');
const app = express();
const port = 8080;

app.get('/', (req, res) => res.send('Hello home!'));
app.get('/about-us', (req, res) => res.send('Hello about us!'));
app.post('/user/set-profile', (req, res) => res.send('Hello profile!'));
//last 404 page 
app.get('*', (req, res) => res.send('Page Not found 404'));
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
1 голос
/ 07 ноября 2017

вы можете обрабатывать ошибки в соответствии с типом контента

Дополнительно, обработка в соответствии с кодом состояния.

app.js

import express from 'express';

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// when status is 404, error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    if( 404 === err.status  ){
        res.format({
            'text/plain': () => {
                res.send({message: 'not found Data'});
            },
            'text/html': () => {
                res.render('404.jade');
            },
            'application/json': () => {
                res.send({message: 'not found Data'});
            },
            'default': () => {
                res.status(406).send('Not Acceptable');
            }
        })
    }

    // when status is 500, error handler
    if(500 === err.status) {
        return res.send({message: 'error occur'});
    }
});

404.jade

doctype html

html
  head
    title 404 Not Found

    meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
    meta(name = "viewport" content="width=device-width, initial-scale=1.0 user-scalable=no")

  body
      h2 Not Found Page
      h2 404 Error Code

Если вы можете использовать res.format, вы можете написать простой код обработки ошибок.

Рекомендация res.format() вместо res.accepts().

Если ошибка 500 возникает впредыдущий код if(500 == err.status){. . . } называется

1 голос
/ 19 декабря 2012

Хотя приведенные выше ответы верны, для тех, кто хочет, чтобы это работало в IISNODE, вам также необходимо указать

<configuration>
    <system.webServer>
        <httpErrors existingResponse="PassThrough"/>
    </system.webServer>
<configuration>

в вашем файле web.config (в противном случае IIS будет использовать ваш вывод).

0 голосов
/ 13 августа 2018

Если вы хотите перенаправить на страницы ошибок из ваших функций (маршрутов), выполните следующие действия -

  1. Добавьте код общих сообщений об ошибках в ваш app.js -

    app.use(function(err, req, res, next) {
        // set locals, only providing error in development
        res.locals.message = err.message
        res.locals.error = req.app.get('env') === 'development' ? err : {}
    
        // render the error page
        // you can also serve different error pages
        // for example sake, I am just responding with simple error messages 
        res.status(err.status || 500)
       if(err.status === 403){
           return res.send('Action forbidden!');
       }
    
       if(err.status === 404){
           return res.send('Page not found!');
       }
    
       // when status is 500, error handler
       if(err.status === 500) {
           return res.send('Server error occured!');
       }
       res.render('error')
    })
    
  2. В вашей функции вместо перенаправления страницы с ошибкой вы можете сначала установить состояние ошибки, а затем использовать next (), чтобы поток кода прошел вышеупомянутый код -

    if(FOUND){
        ...
    }else{
        // redirecting to general error page
        // any error code can be used (provided you have handled its error response)
        res.status(404)
        // calling next() will make the control to go call the step 1. error code
        // it will return the error response according to the error code given (provided you have handled its error response)
        next()
    }
    
0 голосов
/ 11 августа 2017
app.get('*',function(req,res){
 res.redirect('/login');
});
0 голосов
/ 30 апреля 2017

Я использовал описанный ниже обработчик для обработки ошибки 404 со статическим файлом .ejs.

Поместите этот код в скрипт маршрута и затем потребуйте от file.js до app.use() в вашем app.js / server.js / www.js (при использовании IntelliJ для NodeJS)

Вы также можете использовать статический файл .html.

//Unknown route handler
 router.get("[otherRoute]", function(request, response) {
     response.status(404);
     response.render("error404.[ejs]/[html]");
     response.end();
 });

Таким образом,если запущен экспресс-сервер, ответ будет правильным 404 error, и ваш веб-сайт также может содержать страницу, на которой правильно отображается ответ сервера 404.Вы также можете включить navbar в этот 404 error template, который ссылается на другой важный контент вашего сайта.

0 голосов
/ 07 февраля 2017

Для отправки на пользовательскую страницу:

app.get('*', function(req, res){
  if (req.accepts('html')) {
     res.send('404', '<script>location.href = "/the-404-page.html";</script>');
     return;
  }
});
0 голосов
/ 01 декабря 2016

Если вы используете пакет экспресс-генератора:

следующий (ERR);

Этот код отправляет вас в промежуточное ПО 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...