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

发布时间:2020-08-11 整理:编程之家
编程之家收集整理的这篇文章主要介绍了web-services – Elixir – Simple Plug示例在每个请求上点击两次调用方法编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!
以下代码主要基于此处的示例:

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)
    end
end

这是插件本身:

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")
    end
end

当我使用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")
end

def 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示例在每个请求上点击两次调用方法所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!