elixir plug:从post请求中获取表单数据的正确方法

use*_*314 2 elixir

我正在玩插头路由器并试图在我的路由器中读取一个简单的帖子请求的正文:

表格

<form action="/create_item" method="post">
  <input type="text" value="whatever" name="name">
  <input type="number" value="99" name="age">
  <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

我的路由器

post("/create_item") do
  {:ok, data, _conn} = read_body(conn)
  send_resp(conn, 200, data)
end
Run Code Online (Sandbox Code Playgroud)

如果我提交我的表单,这将呈现name=input-value给页面,但然后我将不得不解析该字符串以获取值.这有点冒犯它的错误方法.

从我对elixir的小经验来看,似乎我应该做一些类似于模式匹配的东西从我的表单中read_body(conn)拉出每个key: value,但我在插件文档中找不到任何关于它的东西.我试图通过凤凰源寻找想法,但这有点超出了我的灵丹妙药的知识.有一个parse_form_data/1我缺少的明显功能吗?

wha*_*ide 9

Plug.Conn.read_body/1只需读取请求的主体,而无需解析它.要解析正文,通常需要使用Plug.Parsers插件,该插件根据其内容类型读取和解析请求的正文.

例如,如果您像这样插入:

plug Plug.Parsers, parsers: [:urlencoded]
Run Code Online (Sandbox Code Playgroud)

在管道中的任何地方都conn.params可以使用.