gpt4 book ai didi

elixir - Plug.Exception 如何工作?

转载 作者:行者123 更新时间:2023-12-03 09:09:28 25 4
gpt4 key购买 nike

我在使用一个简单的示例时遇到了一些困难。我没有使用 Phoenix 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

这是一个愚蠢的例子,但我只是想看看它是否会像我认为的那样工作。

我希望 Plug 能够处理 GET/boom 中引发的异常并返回 401 状态

但是,当我尝试 GET/boom 时,它返回 500 状态,因此显然 Plug 并未处理该异常

最佳答案

如果您想捕获这些异常并根据引发的异常发送 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 wrong

关于elixir - Plug.Exception 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com