1)如何在应用程序级别处理“服务器错误”和“未找到页面” ?我应该在哪里放置一个呈现适当页面的处理程序?
也就是说,如果用户访问“my_website.com/fdafdsafds” - 如何向他呈现“error / my_custom_404_page.html”页面?
或者,如果我的应用程序中某处出现错误,例如“1/0”,我怎样才能在应用程序级别上捕获它?
2)在插头里面我有这个:
def call(conn, opts) do
if !some_condition do
# ....
else
# how to render an html template?
Conn.send_resp(conn, 401, "access denied") |> Conn.halt()
end
end
如何从“error / my_html_template.html”渲染自定义错误html模板并将参数传递给它?
答案 0 :(得分:1)
TL; DR 您要声明自定义异常(使用标准Elixir defexception
宏)并为它们实现Plug.Exception
协议,如下所示:
defimpl Plug.Exception, for: Ecto.NoResultsError do
def status(_exception), do: 418
end
然后,一旦提出,它将由此实现处理。
有关如何在Phoenix文档中执行此操作的详细说明。我认为没有理由从那里复制内容,但我必须承认解释非常简单。
答案 1 :(得分:0)
1)我如何处理"服务器错误"和"页面未找到"在...上 申请级别?我应该在哪里放置渲染的处理程序 适当的页面?
我使用了以下技巧
scope "/", MyApp do
post "/*path", PageController, :invalid_path
put "/*path", PageController, :invalid_path
get "/*path", PageController, :invalid_path
end
在 invalid_path 方法中定义自定义错误消息。
注意:在路由器文件的末尾添加这些行