我想知道目前使用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/
我处于开发模式。
答案 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)