scr*_*ipt 7 elixir phoenix-framework
当我们发送请求时,我们在conn结构中有当前路径信息.让我们说补丁请求.
["v1", "users", "2"] or "v1/users/2"
Run Code Online (Sandbox Code Playgroud)
我正在根据db中的路径信息为用户授权编写插件.在db中,路径存储如下:
"v1/users/:id"
Run Code Online (Sandbox Code Playgroud)
这是我们从跑步中获得的路径mix phx.routes.我有可能得到"v1/users/:id"而不是"v1/users/2"当前的路径吗?所以我可以将它与db中存储的路径相匹配.
有什么工作吗?
一种非常简单的方法是手动替换路径中关联键的值。
在conn结构体中,我们有path_info: ["v1", "users", "2"]和path_params: %{"id" => "2"},所以我们可以这样做:
Enum.reduce(conn.path_params, conn.path_info, fn {key, value}, acc ->
index = Enum.find_index(acc, fn x -> x == value end)
List.replace_at(acc, index, ":#{key}")
end)
|> Enum.join("/")
Run Code Online (Sandbox Code Playgroud)
输出将是v1/users/:id.
请注意,如果您的参数值与路线的一部分相同(这似乎不太可能发生),则此操作将会失败。另外,如果您有多个可以采用相同值的参数,那么我们将依赖于 中参数的顺序path_params。