在我目前的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
扩展名结尾。
答案 0 :(得分:2)
正如@JoséValim指出的那样,我没有正确看到JSON错误消息的原因是因为我正在通过浏览器访问页面。如果我在请求中正确设置了标题Accept: application/json
,它就可以工作。
在template_not_found
的{{1}}函数中,只需编写error_view.ex
就足够了。