不是最有效的方法,但就练习而言,我想在POST请求中解析来自urlencoded数据的params。
我对模式匹配和Erlang / Elixir语法的概念不熟悉,所以我设法创建了以下代码:
defmodule DataParser do
def urlEncodedParse(body) do
Regex.split(~r/&/, body)
|> Enum.map(fn(data) -> {
String.to_atom(hd(Regex.split(~r/=/, data))),
List.last(Regex.split(~r/=/, data))
} end)
end
end
运行它:
iex(4)> body = "key=asdasd123123&name=Leonidas&country=Sparta"
"key=asdasd123123&name=Leonidas&country=Sparta"
iex(6)> params = DataParser.urlEncodedParse(body)
[key: "asdasd123123", name: "Leonidas", country: "Sparta"]
iex(8)> params[:name]
"Leonidas"
但我确信有更有效的方法可以做到这一点。 我也知道我可以使用Plug.Parsers来实现相同的目标,只是想知道尽可能减少依赖关系可以做多少。