Phoenix中的静态HTML页面

时间:2016-04-25 14:31:01

标签: html json phoenix-framework elm

我正在尝试为Elm构建JSON后端。我只想提供一个页面 - elm.html,一个js文件 - Main.js - 和一个css文件。

我试过following these instructions但是没有足够的帮助像我这样的新手。

所以现在我有了router.ex

  scope "/", JwtExample do
    pipe_through :browser # Use the default browser stack

    get "/elm", RootController, :index
    get "/", PageController, :index
  end


  # Other scopes may use custom stacks.
  scope "/api", JwtExample do
    pipe_through :api

    resources "/users", UserController, except: [:new, :edit]
  end

此控制器

defmodule JwtExample.RootController do
  use JwtExample.Web, :controller

  plug :action

  def index(conn, _params) do
    redirect conn, to: "/elm.html"
  end
end

我的文件位于web/staticpriv/static

但是当我冲浪/榆树时,我得到了

  

找不到GET /elm.html(JwtExample.Router)的路由

2 个答案:

答案 0 :(得分:1)

好的,基于psantos的答案,我需要将lib / endpoint.ex更改为

  plug Plug.Static,
    at: "/", from: :jwt_example, gzip: false,
    only: ~w(css fonts images js favicon.ico robots.txt elm.html)

答案 1 :(得分:1)

这是一个解决方案,它也为静态页面提供服务,以获取对根URL的请求,即。即https://myapp.test/

这是一个解决方案,使用一个简短的函数插件将请求映射到index.html的根路径,该插件可以添加到endpoint.ex而不涉及控制器。它的工作原理是定义一个简短的Plug函数来改变请求的路径。我希望与在控制器中进行操作相比,它在端点上的速度要快一点。

def redirect_index(conn = %Plug.Conn{path_info: []}, _opts) do
    %Plug.Conn{conn | path_info: ["elm.html"]}
end

def redirect_index(conn, _opts) do
    conn
end

plug :redirect_index

# This is Phoenix's standard configuration of Plug.Static with
# index.html added.

plug Plug.Static,  
    at: "/", from: :phoenix_elm_starter_template, gzip: false,
    only: ~w(css fonts elm.html images js favicon.ico robots.txt)

请注意,在生产中,您通常会在应用程序服务器层处理静态资产,可能根本不会触及Phoenix。