在Elixir中解析urlencoded数据(没有Plug.Parsers)

时间:2016-01-19 16:08:17

标签: elixir

不是最有效的方法,但就练习而言,我想在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来实现相同的目标,只是想知道尽可能减少依赖关系可以做多少。

1 个答案:

答案 0 :(得分:0)

使用URI.decode_query / 2代替 更多细节https://hexdocs.pm/elixir/URI.html#decode_query/2