检查url参数是否为数字

时间:2017-01-06 08:56:54

标签: elixir

我正在探索Elixir的世界并构建以下内容:

defmodule Hello do
  def init(default_opts) do
    IO.puts "starting up App..."
    default_opts
  end

def call(conn, _opts) do
  route(conn.method, conn.path_info, conn)
end

def route("GET", ["customers", cust_id], conn) do
   # check parameter
   IO.puts user_id
   IO.puts "Check if user_id is a number:"
   IO.puts is_number(cust_id)

  if is_number(cust_id) do
    conn |> Plug.Conn.send_resp(200, "Customer id: #{cust_id}")
    else 
     conn |> Plug.Conn.send_resp(404, "Couldn't find customer, sorry!")
  end

end

我想知道为什么is_number函数(或is_integer)给出错误的结果。我使用的网址是:http://localhost:4000/customers/12

1 个答案:

答案 0 :(得分:1)

is_number(cust_id)为false,因为cust_id是一个包含整数位的字符串,但它实际上并不是一个数字。它可以解析成一个整数,但它是一个字符串,因为conn.path_info不会自动将整数形式的字符串转换为整数。您可以使用Integer.parse/2检查字符串是否为有效整数:

if match?({_, ""}, Integer.parse(cust_id)) do
  conn |> Plug.Conn.send_resp(200, "Customer id: #{cust_id}")
else 
  conn |> Plug.Conn.send_resp(404, "Couldn't find customer, sorry!")
end