我\xe2\x80\x99m 在获取一个简单的示例时遇到一些问题。I\xe2\x80\x99m 不使用 Phoenix FWIW,只需插入
\n\ndefmodule Unauthorized do\n defexception message: "not authorized", plug_status: 401\nend\n\ndefmodule Foo do\n use Plug.Router\n plug :match\n plug :dispatch\n\n get "/" do\n send_resp(conn, 200, "heyyyo")\n end\n\n get "/boom" do\n raise Unauthorized\n end\n\n match _ do\n send_resp(conn, 404, "not found")\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个愚蠢的例子,但我\xe2\x80\x99m只是想看看它是否会像我认为的那样工作。
\n\n我希望 Plug 能够处理引发的异常GET /boom并返回 401 状态
但是,当我尝试GET /boom返回 500 状态时,显然异常是由 Plug 处理的 \xe2\x80\x99t
我有一个路由器模块,可以将请求转发到其他路由器。在这个路由器中,我有一个由plug(:match)和组成的管道plug(:dispatch)。
defmodule Example.Router do
use Plug.Router
plug(:match)
plug(:dispatch)
forward("/check", to: Example.Route.Check)
get("/", do: send_resp(conn, 200, "router"))
end
Run Code Online (Sandbox Code Playgroud)
在第二个模块中,我有相同的管道:
defmodule Example.Route.Check do
use Plug.Router
plug(:match)
plug(:dispatch)
get "/", do: send_resp(conn, 200, "ok")
end
Run Code Online (Sandbox Code Playgroud)
我在这里看到的问题是我似乎总是需要plug(:match)并且plug(:dispatch)在所有Plug路由器中。所以我有以下问题:
我尝试了几次不同的迭代,但是在编译时始终出现此错误:
Routes.session_path/2 is undefined (module Routes is not available)
Run Code Online (Sandbox Code Playgroud)
我的代码:
Routes.session_path/2 is undefined (module Routes is not available)
Run Code Online (Sandbox Code Playgroud)
在Phoenix 1.4中有所不同,尝试在此处参考文档https://hexdocs.pm/phoenix/Phoenix.Router.html,但仍然没有运气。
我有一个简单的即插即用处理程序
post "/some/url" do
# do something
# render(something)
end
Run Code Online (Sandbox Code Playgroud)
…但是我想以某种方式重定向到另一个get处理程序,而不是呈现html。
如何使用plug_cowboy 2.0做到这一点?
使用Plug.Parsers,可以配置用于解析 JSON 请求的模块:
plug Plug.Parsers,
parsers: [:json],
json_decoder: Jason
Run Code Online (Sandbox Code Playgroud)
但是,使用此语法Jason.decode!/2会使用空opts参数进行调用。
怎样才能给指定的选项提供呢json_decoder?例如,我想将keys: :atoms选项传递给Jason.decode!/2.
所以我正在学习 Elixir 和 Pheonix 看起来太多而无法开始学习,所以我使用 Plug and Poison 制作了一个简单的 JSON Rest API,但要查看任何更改,我需要停止服务器并mix run --no-halt再次运行。我来自nodeJS,它只nodemon跟踪依赖于根模块的所有文件,并在看到任何更改时重新加载整个服务器。有没有类似的 mix 或 Elixir 的东西?我知道您可以使用 OTP 重新加载代码的特定部分,如果我的服务器在保存时执行此操作,那就最好了,但现在我只想更快地响应我所做的事情。有人能指出我正确的方向吗?