0

プラグ パイプラインは、アプリケーションを構築する素晴らしい方法です。現在、リクエストがコントローラーに到達する前に、パイプラインを適用してデータをフィルター/フォーマットするだけです。すべてのビューが処理された後に実行するパイプラインを適用する方法はありますか? すべてのビュー レンダリング関数で 2 つのデータ変換を実行する JSON API があります。

  def render("app.json", %{app: app}) do
    app
    ...
    |> ApiHelpers.add_data_property
    |> ProperCase.to_camel_case
  end 

これを処理するよりクリーンな方法はありますか、それともビューモジュールのすべてのレンダリング関数で行う必要があるだけですか?

アップデート

@sabiwara が指摘したように、register_before_sendコールバックがあります。私は自分のユースケースに実装しようとしましたが、コールバックは応答を操作するよりもログに記録するためのもののようです。

私はもう試した

  def call(conn, _opts) do
    register_before_send(conn, fn conn ->
      resp(conn, conn.status, conn.resp_body |> FormatHelpers.camelize() |> ApiHelpers.add_data_property())
    end)
  end

conn.resp_bodyマップに変換しようとしたリストですが、まだうまくいきません。

4

1 に答える 1