为不同的管道呈现不同的错误(:api 和 :browser)?



在我目前的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参数。它的论点是templateassigns.

我是否应该尝试检查assigns以确定传入请求尝试访问的路由?尝试检查模板似乎没有帮助,并且尝试渲染的模板似乎都以扩展名结束.html即使我尝试访问/api下的路线。

正如@JoséValim指出的那样,我没有正确看到 JSON 错误消息的原因是因为我通过浏览器访问页面。如果我在请求中正确设置了标头Accept: application/json,它就起作用了。

error_view.extemplate_not_found函数中,似乎只写Phoenix.Controller.status_message_from_template(template)就足够了。

最新更新