我写了一个我想在两个或更多控制器中使用的插件。
对于第一个控制器,params %{params: %{“param1” => param01, “param2” => param02}} = conn
中有两个变量,而第二个控制器只有一个变量%{params: %{“param1” => param01} = conn
。
我在插件中使用%{params: %{“param1” => param01, “param2” => param02}} = conn
进行模式匹配。当请求到达第二个控制器时,它会抛出(MatchError) no match of right hand side value:
。
我想要一个模式匹配,可以优雅地处理这两个案例。有没有办法为{strong>第二个控制器设置param02
到nil
,而不是出错。
提前感谢您的回答。我刚开始学习Elixir / Phoenix Framework并且还是新手。
答案 0 :(得分:2)
你无法通过模式匹配来做到这一点。您可以改为提取params
并在代码中指定param2
:
def foo(%{params: %{“param1” => param01} = params} = conn) do
param02 = params["param2"]
...
end
param02
现在将设置为conn.params [“param2”](如果存在),否则设置为nil
。