lud
Why is Phoenix default ErrorJSON using plural errors with a map as the value?
Hello,
By default Phoenix will generate this on a new project:
# def render("500.json", _assigns) do
# %{errors: %{detail: "Internal Server Error"}}
# end
def render(template, _assigns) do
%{errors: %{detail: Phoenix.Controller.status_message_from_template(template)}}
end
Not sure if it is because of an english thing (not my native language) but to me it seems that a map would describe a single error ; plus we are giving the detail for one error.
When I’ll have multiple errors, on an Ecto changeset for instance, I’ll generally return something like that:
%{
error: %{
message: "Invalid Request",
detail: %{
errors: [] # ... changeset errors as a list
}
}
}
Or maybe something like this:
%{
errors: [
%{
message: "Invalid Request",
detail: [] # ... changeset errors as a list
}
]
}
But I don’t understand the default layout, which is one of the first things I change on a new project.
What is the rationale behind this?
Thank you.
First Post!
lud
Most Liked
lud
Hello,
Well I’m asking what is the rationale beyond those choices. Of course I can change it.
Code gen is only there to get someone started. It’ll never be 100% correct for all use cases
My problem here is that is has been correct for 0% use cases in my experience. We always changed it. I wonder why the current layout was chosen.
jdiago
I dug a little deeper and this is my speculation:
This bit is in the MyApp.ErrorJSON module.
When you use mix phx.gen.json, you will get a resource_json.ex which will have the following:
def error(%{changeset: changeset}) do
errors = Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end)
%{errors: errors}
end
Seems to me like lud’s suggested change is supposed to go into a controller’s JSON module.
Notice the matching :errors root key. That probably makes it easier for API clients to handle errors no matter where it’s coming from (an action on a resource or somewhere up the plug chain)
LostKobrakai
Last Post!
lud
But you would not know if its a list or an object. Hence the second “correct” example I gave where errors is always a list.
Popular in Discussions
Other popular topics
Latest Phoenix Threads
Chat & Discussions>Discussions
Latest on Elixir Forum
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









