我很难找到一个简单的例子。我不使用菲尼克斯FWIW,只要插上电源
defmodule Unauthorized do
defexception message: "not authorized", plug_status: 401
end
defmodule Foo do
use Plug.Router
plug :match
plug :dispatch
get "/" do
send_resp(conn, 200, "heyyyo")
end
get "/boom" do
raise Unauthorized
end
match _ do
send_resp(conn, 404, "not found")
end
end这是个愚蠢的例子,但我只是想看看它是否能像我认为的那样起作用。
我希望插件能够处理在GET /boom中引发的异常并返回401状态。
但是,当我尝试GET /boom时,它将返回500个状态,因此很明显,这个异常不是由插件来处理的。
发布于 2017-05-17 19:53:10
如果要捕获这些异常并根据引发的异常发送HTTP状态代码,则需要添加use Plug.ErrorHandler:
defmodule Foo do
use Plug.Router
use Plug.ErrorHandler
...
end通过这种改变,我得到了正确的答复:
$ curl -i http://localhost:4000/boom
HTTP/1.1 401 Unauthorized
server: Cowboy
date: Wed, 17 May 2017 19:59:57 GMT
content-length: 20
cache-control: max-age=0, private, must-revalidate
Something went wronghttps://stackoverflow.com/questions/44033438
复制相似问题