我正在使用简单的凤凰e剂应用程序。在这个应用程序中,我试图公开一个REST API来保存和检索数据。
就我而言,如果主键(电子邮件地址)重复,则我的应用程序将引发错误。我需要知道处理此错误的最佳方法。尝试捕获或任何其他更好的解决方案。
这是我的数据保存方法
def post(conn, %{"stooge" => stooge, "name" => name, "email" => email , "password" => password})do
respond = Repo.insert!(%ApiDb.User{name: name, email: email, stooge: stooge, password: password})
json conn, respond
end
样本有效载荷
{
"stooge": "moe",
"name": "Joe",
"email": "[email protected]",
"password":"asdasd"
}
型号/user.ex
defmodule ApiDb.User do
use ApiDb.Web, :model
schema "users" do
field :password, :string
field :name, :string
field :email, :string
field :stooge, :string
timestamps()
end
@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:name, :email, :password, :stooge])
|> validate_required([:name, :email, :password])
|> validate_format(:email, ~r/@/)
end
end
我尝试了try-catch块,但是没有运气
try do
respond = Repo.insert!(%ApiDb.User{name: name, email: email, stooge: stooge, password: password})
json conn, respond
rescue
e in Ecto.ConstraintError -> IO.puts("An error occurred: ")
end
找到了很好的简单方法
def post(conn, %{"stooge" => stooge, "name" => name, "email" => email , "password" => password})do
try do
respond = Repo.insert!(%ApiDb.User{name: name, email: email, stooge: stooge, password: password})
json conn, respond
rescue
e in Ecto.ConstraintError -> json conn, (%{"status" => false, "message" => e.message})
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句