在我目前的Phoenix项目中,我有一个:browser
管道和一个:api
管道。我想为每个管道呈现不同的错误消息。但是,我不确定如何实现它。
我router.ex
是这样的:
scope "/api", AppWeb do
pipe_through(:api)
# ...
end
scope "/admin", AppWeb do
pipe_through :browser
# ...
end
我希望对/admin
下不存在的路由的所有请求都呈现 HTTP 错误模板,但对任何其他路由的所有请求都呈现 JSON 错误模板。
在config.exs
我有
render_errors: [view: AppWeb.ErrorView, accepts: ~w(json html)]
但是,我不确定如何继续错误视图。
似乎每当发生路由错误时,都会自动调用template_not_found/2
函数,但是,此函数没有conn
参数。它的论点是template
和assigns
.
我是否应该尝试检查assigns
以确定传入请求尝试访问的路由?尝试检查模板似乎没有帮助,并且尝试渲染的模板似乎都以扩展名结束.html
即使我尝试访问/api
下的路线。
正如@JoséValim指出的那样,我没有正确看到 JSON 错误消息的原因是因为我通过浏览器访问页面。如果我在请求中正确设置了标头Accept: application/json
,它就起作用了。
在error_view.ex
template_not_found
函数中,似乎只写Phoenix.Controller.status_message_from_template(template)
就足够了。