gpt4 book ai didi

Elixir 插头 : register_before_send

转载 作者:行者123 更新时间:2023-12-04 16:51:42 25 4
gpt4 key购买 nike

根据文档,Plug.Conn.register_before_send注册在发送请求之前调用的回调。以下代码仅打印“设置”消息而不打印“清理”。

defmodule MyRouter do
use Plug.Router

# Starts the server
def start do
Plug.Adapters.Cowboy.http MyRouter, []
end

plug :my_handle # custom plug
plug :match
plug :dispatch

def my_handle(conn, _opts) do
Plug.Conn.register_before_send(conn, fn conn ->
# Doesn't show up in console.
IO.puts "== cleaning up =="
conn
end)
# This is printed to the console.
IO.puts "== setting up =="
conn
end

get "/" do
send_resp(conn, 200, "world")
end

match _ do
send_resp(conn, 404, "oops")
end
end

我从文档中遗漏了什么吗?为了使这项工作正常进行,设置是什么?提前致谢!

最佳答案

你是对的,但是你没有使用注册了 before_send 的 conn(不要忘记变量在 Elixir 中是不可变的。)

改变:

Plug.Conn.register_before_send(conn, fn conn -> 

到:
conn = Plug.Conn.register_before_send(conn, fn conn -> 

或者重写函数,使 conn 从 register_before_send 返回返回:
def my_handle(conn, _opts) do
IO.puts "== setting up =="
Plug.Conn.register_before_send(conn, fn conn ->
# Doesn't show up in console.
IO.puts "== cleaning up =="
conn
end)
end

关于 Elixir 插头 : register_before_send,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34722407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com