【发布时间】:2016-07-08 03:11:28
【问题描述】:
我正在考虑跳过 Phoenix,因为我正计划为一个使用一些 API 路由来表示其状态的 React 应用程序构建一个演示。似乎是一个熟悉底层技术的机会。
我想出了以下内容,但感觉非常“硬编码”,我很好奇是否有更优雅的解决方案来实现相同的目标。
defmodule DemoApp.Plug.ServeStatic do
use Plug.Builder
@static_opts [at: "/", from: "priv/static"]
plug :default_index
plug Plug.Static, @static_opts
plug :default_404
plug Plug.Static, Keyword.put(@static_opts, :only, ["error_404.html"])
# Rewrite / to "index.html" so Plug.Static finds a match
def default_index(%{request_path: "/"} = conn, _opts) do
%{conn | :path_info => ["index.html"]}
end
def default_index(conn, _), do: conn
# Rewrite everything that wasn't found to an existing error file
def default_404(conn, _opts) do
%{conn | :path_info => ["error_404.html"]}
end
end
我们的想法是让/ 为index.html 服务而不重定向,并在找不到任何内容时提供错误文件的内容,而不是最小响应“404 文件未找到”字符串。
有没有办法在不插入 Plug.Static 两次的情况下实现这一点,或者这是要走的路?稍后我还可以看到包罗万象的 :default_404 与我的 API 路由发生冲突,我不确定如何解决。
任何意见将不胜感激。谢谢!
【问题讨论】: