如何覆盖凤凰城的错误?

saa*_*saa 10 elixir phoenix-framework

我在凤凰上建立了宁静的api(json).而且我不需要html的支持.

如何覆盖凤凰城的错误?示例错误: - 500 - 404没有找到路由和其他.

ste*_*uss 6

对于那些可能遇到同样问题的人来说,需要几个步骤来为404和500响应呈现JSON.

首先添加render("404.json", _assigns)render("500.json", _assigns)你的应用程序的web/views/error_view.ex文件.

例如:

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
Run Code Online (Sandbox Code Playgroud)

然后在您的config/config.exs文件中更新default_format"json".

config :my_app, MyApp.Endpoint,
  render_errors: [default_format: "json"]
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的应用程序纯粹是一个REST API,那么这很好,但是如果您现在也提供HTML响应,请注意,默认情况下,错误将呈现为json.


Pat*_*ity 4

您需要定制MyApp.ErrorView。Phoenix 在 web/views/error_view.ex 中为您生成此文件。模板的默认内容可以在Github上找到。

另请参阅有关自定义错误的文档,尽管它们似乎有点过时,因为它们指示您使用MyApp.ErrorsView(复数),它被替换为MyApp.ErrorView