Я не знаю функцию для этого, кто-нибудь знает одну?
203
Я нашел этот пример весьма полезным:
https://github.com/visionmedia/express/blob/master/examples/error-pages/index.js
Так что это на самом деле эта часть:
// "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
настоящее время не рекомендуется. См github.com/strongloop/express/wiki/...res.json
вместоres.send()
. Они будут вести себя так же в вашем коде, но использование применитres.json
магию при автоматическом преобразовании объектов в строки, где.send()
этого не произойдет. Береженого Бог бережет. expressjs.com/api.html#res.jsonЯ думаю, что вы должны сначала определить все свои маршруты и как последний маршрут добавить
Пример приложения, которое работает:
app.js:
источник
app.get('/public/*', function(req, res){ res.sendfile(__dirname + '/public/' + req.url); })
Вы можете использовать этот маршрут для отправки статических файлов. он отлично работает с указанным выше маршрутом "*".app.use(express.static(__dirname + '/public'));
у меня не работает, проводной.app.use(express.static(...))
пришел послеapp.use(app.router)
. Как только я их поменял, все вышло нормально.Вы можете поставить промежуточное ПО на последнюю позицию, которая выдает
NotFound
ошибку,или даже отображает страницу 404 напрямую:
источник
use()
своим контекстуальныеapp.router
в последний раз. (как в моем случае)GET
s). ПопробуйтеPOST
случайный URL другим методом; он вернет значение по умолчаниюCannot POST...
. Затем злоумышленник узнает, что вы используете Express.JS.res.render('404')
Приведенные выше ответы хороши, но в половине из них вы не получите 404 при возврате своего кода состояния HTTP, а в другой половине вы не сможете получить пользовательский шаблон для визуализации. Лучший способ создать пользовательскую страницу ошибок (404) в Expressjs
Поместите этот код в конец всех ваших отображений URL.
источник
В последней строке app.js просто поместите эту функцию. Это переопределит страницу ошибки по умолчанию «страница не найдена»:
Он переопределит все запросы, которые не имеют корректного обработчика, и отобразит вашу собственную страницу ошибки.
источник
Ответ на ваш вопрос:
И есть отличная статья о том, почему это лучший способ здесь .
источник
send
иend
?send
express-error-handler позволяет вам указать собственные шаблоны, статические страницы или обработчики ошибок для ваших ошибок. Он также выполняет другие полезные функции обработки ошибок, которые должно реализовывать каждое приложение, такие как защита от атак DOS с ошибками 4xx и постепенное отключение при неисправимых ошибках. Вот как вы делаете то, что просите:
Или для пользовательского обработчика:
Или для пользовательского просмотра:
источник
В некоторых случаях нельзя написать страницу 404 для выполнения в качестве последнего маршрута, особенно если у вас есть функция асинхронной маршрутизации, которая вводит / route поздно для участника. Шаблон ниже может быть принят в этих случаях.
источник
https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js
Это то, что делает узел-шаблон.
источник
источник
Самый простой способ сделать это - поймать все на странице ошибок
затем
Теперь вы можете хранить все свои html-страницы (включая страницу html с ошибкой) в переменной
Теперь вы просто вызываете страницы с помощью метода Get и получаете все для всех маршрутов, недоступных для перенаправления на страницу ошибок с помощью app.get ("*")
Не забудьте настроить порт и прослушивать сервер:
Это должно теперь показать вашу страницу ошибки для всех нераспознанных конечных точек!
источник
Хотя приведенные выше ответы верны, для тех, кто хочет, чтобы это работало в IISNODE, вам также необходимо указать
в вашем web.config (в противном случае IIS будет есть ваш вывод).
источник
вы можете обрабатывать ошибки в соответствии с типом контента
Кроме того, обработка в соответствии с кодом состояния.
app.js
404.jade
Если вы можете использовать res.format, вы можете написать простой код обработки ошибок.
Рекомендация
res.format()
вместоres.accepts()
.Если ошибка 500 происходит в предыдущем коде,
if(500 == err.status){. . . }
вызываетсяисточник
Привет пожалуйста найди ответ
источник
Если вы используете пакет express-generator:
Следующий (ERR);
Этот код отправляет вас в промежуточное ПО 404.
источник
Чтобы отправить на пользовательскую страницу:
источник
Я использовал обработчик ниже для обработки ошибки 404 со статическим
.ejs
файлом.Поместите этот код в сценарии маршрута , а затем требует , чтобы
file.js
черезapp.use()
в вашемapp.js
/server.js
/www.js
(при использовании IntelliJ для NodeJS)Вы также можете использовать статический
.html
файл.Таким образом, работающий экспресс-сервер ответит правильным образом,
404 error
и ваш веб-сайт также может содержать страницу, на которой правильно отображается ответ сервера 404. Вы также можете включитьnavbar
в это404 error template
ссылку на другой важный контент вашего сайта.источник
Если вы хотите перенаправить на страницы ошибок из ваших функций (маршрутов), выполните следующие действия:
Добавьте общий код сообщений об ошибках в ваш app.js -
В вашей функции вместо перенаправления страницы с ошибкой вы можете сначала установить статус ошибки, а затем использовать next (), чтобы поток кода прошел вышеупомянутый код -
источник
Страница 404 должна быть настроена непосредственно перед вызовом app.listen.Express для поддержки * в путях маршрутов. Это специальный символ, который соответствует чему угодно. Это может быть использовано для создания обработчика маршрута, который соответствует всем запросам.
источник
Покрытие всех HTTP-глаголов в
express
Чтобы покрыть все HTTP-глаголы и все оставшиеся пути, вы можете использовать:
Окончательное решение будет выглядеть так:
Вы не должны забыть поставить маршрутизатор в конце. Потому что порядок роутеров имеет значение.
источник
Приведенный выше код не работает для меня.
Поэтому я нашел новое решение, которое действительно работает!
Или вы можете даже сделать это на 404 странице.
Надеюсь, это помогло вам!
источник
источник