Оказание 404 в синатре, если файл не найден
У меня есть базовое приложение sinatra, которое отображает файлы из каталога. Я бы хотел, чтобы возвращал 404, если страница не существует. В настоящее время он вызывает 500 ошибок.
get '/:page' do
erb :"pages/#{params[:page]}", layout: :"layouts/application"
end
Ответы
Ответ 1
Попробуйте это;)
# 404 Error!
not_found do
status 404
erb :oops
end
Сделайте себе страницу 404 с любым именем, которое вам нравится (например, мой oops.erb
), и это должно работать нормально.
not_found
является помощником по обработке ошибок Sinatra для захвата ошибки 500s и 404 не найденных, которые он возвращает. После этого вы можете изменить статус HTTP и соответствующее представление. Посмотрите документацию для всех обработчиков ошибок Sinatra: они очень полезны!
Ответ 2
Вы можете сделать что-то вроде:
get '/:page' do
requested_erb = File.join(root, 'pages', params[:page])
pass unless File.exists?(requested_erb)
erb :"#{requested_erb}", :layout: :"layouts/application"
end
Я не тестировал это, поэтому могут возникнуть некоторые проблемы с указанным выше кодом, но это общая идея в моей голове.