小编Tae*_*Tae的帖子

如何在 elixir phoenix 框架中制作导出 csv 控制器?

我有一个像这样制作“contacts.csv”的函数。

def write(people) do
    [["name", "phone_number"]]
    |> Stream.concat(people |> Stream.map(&[&1.name, Formatter.remove_international_code(&1.phone_number)]))
    |> CSV.encode()
    |> Enum.into(File.stream!("contacts.csv"))
end
Run Code Online (Sandbox Code Playgroud)

我希望我的客户点击按钮下载该文件。所以我是这样做的..

在 router.ex 中

get "/csv/:id", CsvExportController, :export
Run Code Online (Sandbox Code Playgroud)

在控制器文件中

def export(conn, %{"id" => phonebook_id}) do
    conn
    |> put_resp_content_type("text/csv")
    |> put_resp_header("content-disposition", "attachment; filename=\"contacts.csv\"")
    |> send_resp(200, export_contacts_from_phonebook(phonebook_id))
  end

  def export_contacts_from_phonebook(phonebook_id) do
    Contact.get_people(phonebook_id)
    |> CsvFormatter.write()
  end
Run Code Online (Sandbox Code Playgroud)

在 CsvFormatter.ex 中

def write(people) do
    [["name", "phone_number"]]
    |> Stream.concat(people |> Stream.map(&[&1.name, Formatter.remove_international_code(&1.phone_number)]))
    |> CSV.encode()
    |> Enum.sort()
    |> Enum.into(File.stream!("contacts.csv"))
end
Run Code Online (Sandbox Code Playgroud)

并尝试但出现错误

no function clause matching in Plug.Conn.resp/3
Run Code Online (Sandbox Code Playgroud)

我怎样才能在控制器文件中做到这一点?

csv elixir phoenix-framework

4
推荐指数
1
解决办法
935
查看次数

你怎么做“搜索、排序、分页”?在凤凰框架中

我在显示页面中有客户联系人列表。它是分页的。

我想在这个列表中添加搜索和排序。我正在研究rummage,但似乎不担心 phoenix 1.3。我在混合 deps.get 时遇到错误,抱怨需要凤凰版本。

第二个选项是turbo_ecto。但我很难理解和运行。

我认为搜索和排序是大多数人实现的命令功能。你怎么做到这一点?我该怎么做?

elixir phoenix-framework

3
推荐指数
1
解决办法
635
查看次数

在 Phoenix 响应中设置 X-Frame-Options

我正在尝试制作一个以为后端的我一直在按照本教程在 Shopify 后台加载我的应用程序,我需要修改x-frame-options标头。

这是我的插头:

@doc false
def init(opts \\ %{}), do: Enum.into(opts, %{})

@doc false
def call(%{params: %{"shop" => shopify_domain}} = conn, _opts) do
  IO.puts("++++++++++ Plug Call ++++++++++++++")
  IO.inspect(shopify_domain)
  # %{"shopify_domain" => shopify_domain_only} = shopify_domain
  shop = ShopifyApp.find_shop_by(shopify_domain)

  allow_shop_or_halt(conn, shop)
end

def call(conn, _opts), do: conn

defp allow_shop_or_halt(conn, nil), do: Conn.halt(conn)

defp allow_shop_or_halt(conn, shop) do
  conn
  |> Conn.put_private(:shop, shop)
  |> Conn.put_resp_header("x-frame-options", "ALLOW-FROM https://#{shop.shopify_domain}/")
end
Run Code Online (Sandbox Code Playgroud)

但 Chrome 浏览器的控制台抱怨说:

加载时遇到无效的“X-Frame-Options”标头.....:ALLOW-FROM https://skbeautysupply.myshopify.com/ '不是可识别的指令。标头将被忽略。

我在这里缺少什么?

elixir x-frame-options phoenix-framework

2
推荐指数
1
解决办法
1111
查看次数

标签 统计

elixir ×3

phoenix-framework ×3

csv ×1

x-frame-options ×1