【问题标题】:Coverting params in Phoenix在 Phoenix 中转换参数
【发布时间】:2017-05-27 05:23:02
【问题描述】:

我在 My Phoenix 应用控制器中有以下操作:

defmodule TattooBackend.Web.API.V1.TokenController do
  use TattooBackend.Web, :controller

  alias TattooBackend.Accounts.Account
  alias TattooBackend.Repo
  alias TattooBackend.Web.Endpoint
  alias Comeonin.Bcrypt
  alias Phoenix.Token

  action_fallback TattooBackend.Web.FallbackController

  def create(conn, params) do
    email = to_string(params["email"])
    password = to_string(params["password"])

    account = Repo.get_by(Account, email: String.downcase(email))

    case account && Bcrypt.checkpw(password, account.crypted_password) do
      true ->  render conn, token:  Token.sign(Endpoint, "user", account.id)
      _    ->  {:error, :wrong_credentials}
    end
  end
end

在这些方面:

email = to_string(params["email"])
password = to_string(params["password"])

在这些行中,如果参数为 nil,我会将它们转换为空字符串。我这样做是因为当我将 nil 传递给 String.downcase 方法时,应用程序会中断。那么问题来了,有没有什么“凤凰方式”来处理这种情况呢?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    我会使用 || 运算符,如果 LHS 是 nilfalseMap.get/3,则返回 RHS 并带有默认值:

    email = params["email"] || ""
    password = params["password"] || ""
    

    email = Map.get(params, "email", "")
    password = Map.get(params, "password", "")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 2018-08-24
      • 2019-01-24
      • 2017-10-26
      • 2018-04-15
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多