Plugs 管道是构建应用程序的绝佳方式。目前虽然我只在请求到达控制器之前应用管道来过滤/格式化数据。有没有办法在处理每个视图后应用管道运行?我有一个 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
是我尝试将其转换为地图但仍然不行的列表。