2015-02-21 50 views

cevap

3

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

+0

Evet, gördüm. Ama benim için çalışma, belki yanlış bir şey yapıyorum. Örnek - https://gist.github.com/saa/c175ae731e32790de17f – saa

+1

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. –

+1

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

5

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.

+1

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

0

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.

İlgili konular