我想区分"找不到页面"和"资源未找到"错误。 是否可以让异常类型执行以下操作?
def render("404.json", assigns) do
case assigns[:reason] do
NoRouteErro -> message = "Route not found"
Ecto.NoResultsError -> message = "Resource not found"
_ -> message = "Uncaught exception"
end
ContactService.ResponseHelper.error(message)
end
答案 0 :(得分:3)
你几乎是对的;你匹配的模式不正确。要使结构的结构类型与TextView
匹配(并忽略结构的任何字段的值),您需要在结构的模块名称之后使用case
之前和%
。您还应该在{}
之外进行分配,以防止Elixir的“不安全变量”警告。我还在功能头中切换到模式匹配,而不是使用case
。
最终代码:
assigns[:reason]
使用此代码,我得到以下结果:
def render("404.json", %{reason: reason}) do
message = case reason do
%Phoenix.Router.NoRouteError{} -> "Route not found"
%Ecto.NoResultsError{} -> "Resource not found"
_ -> "Uncaught exception"
end
# ContactService.ResponseHelper.error(message)
%{error: message}
end