web-services – Elixir – Simple Plug示例在每个请求上点击两次调用方法

web-services – Elixir – Simple Plug示例在每个请求上点击两次调用方法,第1张

概述以下代码主要基于此处的示例: http://hexdocs.pm/plug/ 唯一真正的区别是增加了一名主管: defmodule MyApi.Supervisor do use Supervisor def start_link do Supervisor.start_link(__MODULE__, :ok) end def init(:ok 以下代码主要基于此处的示例:

http://hexdocs.pm/plug/

唯一真正的区别是增加了一名主管:

defmodule MyAPI.Supervisor do    use Supervisor    def start_link do        Supervisor.start_link(__MODulE__,:ok)    end    def init(:ok) do        children = [             Plug.Adapters.Cowboy.child_spec(                :http,MyAPI.BasicServer,[],[ port: 80 ]            )         ]        supervise(children,strategy: :one_for_one)    endend

这是插件本身:

defmodule MyAPI.BasicServer do    import Plug.Conn    import Process    def init(options) do        IO.puts("Log Init")        options    end    def call(conn,_opts) do        IO.puts("Log Response")        conn            |> put_resp_content_type("text/plain")            |> send_resp(200,"Hello world")    endend

当我使用IEx -S mix运行应用程序时,打开浏览器,然后点击localhost,IEx提示每次http请求的IO.puts’Log Response’两次…

是什么原因造成的?

解决方法 在本地测试后,我认为第一个请求是针对favicon.您可以看到,如果添加IO.inspect(conn.path_info) – 它将输出[“favicon.ico”].

您可以轻松地在路径上添加匹配,如下所示:

def call(conn = %{path_info: []},_opts) do  conn  |> put_resp_content_type("text/plain")  |> send_resp(200,"Hello world")enddef call(conn,_) do  conn  |> put_resp_content_type("text/plain")  |> send_resp(404,"Not found")end

请注意,[]表示/ path.

总结

以上是内存溢出为你收集整理的web-services – Elixir – Simple Plug示例在每个请求上点击两次调用方法全部内容,希望文章能够帮你解决web-services – Elixir – Simple Plug示例在每个请求上点击两次调用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存