我正在探索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
答案 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