首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Plug.Exception是如何工作的?

Plug.Exception是如何工作的?
EN

Stack Overflow用户
提问于 2017-05-17 19:37:57
回答 1查看 1.5K关注 0票数 2

我很难找到一个简单的例子。我不使用菲尼克斯FWIW,只要插上电源

代码语言:javascript
复制
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个状态,因此很明显,这个异常不是由插件来处理的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-17 19:53:10

如果要捕获这些异常并根据引发的异常发送HTTP状态代码,则需要添加use Plug.ErrorHandler

代码语言:javascript
复制
defmodule Foo do
  use Plug.Router
  use Plug.ErrorHandler

  ...
end

通过这种改变,我得到了正确的答复:

代码语言:javascript
复制
$ 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44033438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档