如何在凤凰框架中获取当前的url

时间:2016-06-09 20:14:23

标签: elixir phoenix-framework

我想知道目前使用elixir / phoenix框架的网址,我怎么能得到这个?

编辑#1

我的nginx配置文件:

server {
        client_max_body_size 100M;

        listen  80;

        server_name *.babysittingbordeaux.dev *.babysittingparis.dev

        access_log  /usr/local/var/log/nginx/baby-access.log;
        error_log   /usr/local/var/log/nginx/baby-error.log;


        location / {
            proxy_pass http://127.0.0.1:4000;
        }
}

代码:

Atom.to_string(conn.scheme) <> "://" <> (Enum.into(conn.req_headers, %{}) |> Map.get("host")) <> conn.request_path

该示例返回http://127.0.0.1:4000/,我想获得http://www.babysittingbordeaux.dev/

我处于开发模式。

3 个答案:

答案 0 :(得分:7)

如果您只对请求路径感兴趣,可以使用conn.request_path,其值为"/users/1"

要获取包含您可以使用的主机的网址

MyApp.Router.Helpers.url(conn) <> conn.request_path

会返回"http://localhost:4000/users/1"之类的结果。

答案 1 :(得分:4)

我不确定哪种方法最好。

但也许这样的内容可以作为IndexController内的插图。

  def index(conn, params) do

    url_with_port = Atom.to_string(conn.scheme) <> "://" <>
                    conn.host <> ":" <> Integer.to_string(conn.port) <>
                    conn.request_path

    url =  Atom.to_string(conn.scheme) <> "://" <>
            conn.host <>
            conn.request_path

    url_phoenix_helper = Tester.Router.Helpers.index_url(conn, :index, params["path"]) # <-- This assumes it is the IndexController which maps to index_url/3

    url_from_endpoint_config = Atom.to_string(conn.scheme) <> "://" <>
                               Application.get_env(:my_app, MyApp.Endpoint)[:url][:host]  <>
                               conn.request_path

url_from_host_header =  Atom.to_string(conn.scheme) <> "://" <> 
                        (Enum.into(conn.req_headers, %{}) |> Map.get("host")) <> 
                        conn.request_path

    text = ~s"""

      url_with_port :: #{url_with_port}

      url :: #{url}

      url_phoenix_helper :: #{url_phoenix_helper}

      url_from_endpoint_config :: #{url_from_endpoint_config}

      url_from_host_header :: #{url_from_host_header}
    """

    text(conn, text)
  end

答案 2 :(得分:1)

您可以使用enter image description here

current_url(conn)

端点配置将定义URL:

config :my_app_web, MyAppWeb.Endpoint, url: [host: "example.com"]