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