我正在试图找出如何配置Plug.Static ,而不需要任何其他框架(菲尼克斯、糖等);只有牛仔、插件和药剂。我只是不知道怎么把东西放在路由器里。
plug :match
plug Plug.Static, at: "/pub", from: :cerber
plug :dispatch
get "/" do
Logger.info "GET /"
send_resp(conn, 200, "Hello world\n")
endPlug.Static的声明在正确的地方吗?不是应该是在plug :dispatch之后吗?index.html说,要达到的网址是什么?index.html应该位于哪里?
我只是迷路了。
发布于 2015-09-12 22:11:13
看看Plug.Router docs,了解:match和:dispatch是如何工作的。:match将尝试找到一个匹配的路由,:dispatch将调用它。这意味着,只有在路由器中有匹配的路由时,才会调用安装程序中的Plug.Static,这是没有意义的。你想要plug Plug.Static先于一切。记住,插件只是按照声明的顺序调用的函数。
除此之外,您的Plug.Static设置似乎还可以。您的当前配置将服务于"/pub“中的资产,这意味着"/pub/index.html”将在您的应用程序中查找“priv/静态/index.html”。更多信息在这里:http://hexdocs.pm/plug/Plug.Static.html
发布于 2018-07-03 13:29:30
这就是我一直在寻找的答案。
在应用程序启动方法中,将Plug.Router与牛仔一起使用:
defmodule HttpServer.Application do
require Logger
use Application
def start(_type, _args) do
children = [
{Plug.Adapters.Cowboy2, scheme: :http, plug: HttpServer.Router, options: [port: 4002]}
]
opts = [strategy: :one_for_one, name: HttpServer.Supervisor]
Supervisor.start_link(children, opts)
end
end路由器模块如下所示:
defmodule HttpServer.Router do
use Plug.Router
plug(Plug.Logger)
plug(:redirect_index)
plug(:match)
plug(:dispatch)
forward("/static", to: HttpServer.StaticResources)
get "/sse" do
# some other stuff...
conn
end
match _ do
send_resp(conn, 404, "not found")
end
def redirect_index(%Plug.Conn{path_info: path} = conn, _opts) do
case path do
[] ->
%{conn | path_info: ["static", "index.html"]}
["favicon.ico"] ->
%{conn | path_info: ["static", "favicon.ico"]}
_ ->
conn
end
end
end在这里,对"/static“的请求被转发到HttpServer.StaticResources模块,但是首先,请求路径被修改为"/”和"/favicon.ico“,并带有插头(:redirect_index)。所有静态文件(*.html、*.ico、*.css、*.js等)放置在默认位置(project_dir/priv/静态)。
最后,StaticResource模块:
defmodule HttpServer.StaticResources do
use Plug.Builder
plug(
Plug.Static,
at: "/",
from: :http_server
)
plug(:not_found)
def not_found(conn, _) do
send_resp(conn, 404, "static resource not found")
end
end发布于 2016-03-28 22:20:25
若泽·瓦利姆所说的一切。下面是一个最简单的例子:
defmodule Server do
use Plug.Builder
plug Plug.Logger
plug Plug.Static, at: "/", from: "/path/to/static"
end这将在"/“端点上为”/path/to/静态“中的所有静态文件提供服务。
查看文档以获得更多选项和更深入的解释。
https://stackoverflow.com/questions/32543265
复制相似问题