0

有没有办法在被 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在编码器中获取最终状态即可。

4

0 回答 0