在发送之前将HTTP状态附加到Poison编码的JSON

时间:2017-06-24 14:50:30

标签: elixir phoenix-framework cowboy elixir-poison

在Poison编码之前,有没有办法将HTTP状态放在特定的结构中?

我想更常见的问题是我可以在编码器的conn功能级别访问encode吗?我正在尝试构建一个类似于此处指定的API:http://jsonapi.org/examples/#error-objects

在我的控制器功能中,我有这个,它在请求发送出门之前透明地放置HTTP状态。但是,如果某个插件修改了管道中的HTTP状态,那么在创建ApiMessage期间我放置的状态也需要更新。

conn |> put_status(:forbidden) |> json(%ApiMessage{ status: 403, message: "Nope" })

这是我要编码的结构:

defmodule MyApp.ApiMessage do
  @enforce_keys [:message]

  defstruct message: nil, success: false, status: 422
end

我想使用自定义编码器在编码结构之前放置HTTP状态,如下所示:

defimpl Poison.Encoder, for: [MyApp.ApiMessage] do
  def encode(t, _options) do
    # get conn here somehow and set the status to current
    # conn status
  end
end

这可以在凤凰城做吗?我想我只需要弄清楚如何让编码器中的最终conn获得状态。

0 个答案:

没有答案