Phoenix'te huzurlu api (json) yapıyorum. Ve html desteğine ihtiyacım yoktu.Phoenix'teki hatalar nasıl geçersiz kılınır?
Phoenix'teki hatalar nasıl geçersiz kılınır? Örnek hatalar: - 500 - 404 hiçbir rota bulunamadı ve diğer.
Phoenix'te huzurlu api (json) yapıyorum. Ve html desteğine ihtiyacım yoktu.Phoenix'teki hatalar nasıl geçersiz kılınır?
Phoenix'teki hatalar nasıl geçersiz kılınır? Örnek hatalar: - 500 - 404 hiçbir rota bulunamadı ve diğer.
MyApp.ErrorView
'u özelleştirmeniz gerekiyor. Phoenix bu dosyayı sizin için web/views/error_view.ex dosyasında oluşturur. Şablonun varsayılan içeriği on Github bulunabilir. onlar vardı aynı sorunları olabilir olanlar için MyApp.ErrorView
ikâme edildiği, sen MyApp.ErrorsView
(çoğul) kullanmak talimat çünkü biraz modası geçmiş gibi görünüyor olsa da
Ayrıca, the docs on custom errors Orada birkaç bakın JSON'u 404 ve 500 yanıt için işlemek için gereken adımların sayısı.
Önce uygulamanızın web/views/error_view.ex
dosyasına render("404.json", _assigns)
ve render("500.json", _assigns)
dosyalarını ekleyin. Örneğin
: default_format
"json"
şekilde güncelledik config/config.exs
dosyada Sonra
defmodule MyApp.ErrorView do
use MyApp.Web, :view
def render("404.json", _assigns) do
%{errors: %{message: "Not Found"}}
end
def render("500.json", _assigns) do
%{errors: %{message: "Server Error"}}
end
end
. Uygulamanız tamamen REST API ise bu iyi olacak, ama aynı zamanda json olarak görüntülenecek varsayılan hatalarından şimdi HTML yanıtları işlemek durumunda dikkatli olacağını
config :my_app, MyApp.Endpoint,
render_errors: [default_format: "json"]
Not.
Bunun neden reddedildiğinden emin değil. Bu cevap benim için çalışıyor ve kabul edilen cevap yok. Default_format'ı değiştirmek yerine html değerini kaldırarak 'kabul ediyorum' modunu değiştirdim. – John
router.ex
içinde plug :accepts, ["json"]
ile 400-500 hataları geçersiz kılabilirsiniz. Örneğin,
# config/config.exs
...
config :app, App.endpoint,
...
render_errors: [accepts: ~w(html json)],
...
# web/views/error_view.ex
defmodule App.ErrorView do
use App.Web, :view
def render("404.json", _assigns) do
%{errors: %{message: "Not Found"}}
end
def render("500.json", _assigns) do
%{errors: %{message: "Server Error"}}
end
end
# in router.ex
defmodule App.Router do
use App.Web, :router
pipeline :api do
plug :accepts, ["json"]
end
pipe_through :api
# put here your routes
post '/foo/bar'...
# or in scope:
scope '/foo' do
pipe_through :api
get 'bar' ...
end
Çalışır.
Evet, gördüm. Ama benim için çalışma, belki yanlış bir şey yapıyorum. Örnek - https://gist.github.com/saa/c175ae731e32790de17f – saa
Bu cevap doğrudur. Ne yazık ki, hata işleminde, tetiklenecek özel hatalardan kaçınan bir hata vardır. Geçici olarak "fişi: kabul eder, ..." yönlendiriciden uç noktaya taşırsanız, işe yarayabilir. Aksi takdirde lütfen yeni bir Phoenix sürümü için bekleyin. –
Bunu uç noktasında doğru şekilde nasıl belirleyebilirim? Eğer sadece - fiş: kabul eder, ~ w (json) Hata fonksiyonum var/2 undefined kabul eder. – saa