Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir Rescue Phoenix.MissingParamError并为用户返回json_Elixir_Phoenix Framework - Fatal编程技术网

Elixir Rescue Phoenix.MissingParamError并为用户返回json

Elixir Rescue Phoenix.MissingParamError并为用户返回json,elixir,phoenix-framework,Elixir,Phoenix Framework,我在Phoenix应用程序中的一个控制器中执行以下操作: plug :scrub_params, "account" plug :scrub_params, "studio" def create(conn, %{"account" => account_params, "studio" => studio_params}) do end 当有人没有发送正确的参数时,应用程序将返回Phoenix.MissingParamError错

我在Phoenix应用程序中的一个控制器中执行以下操作:

      plug :scrub_params, "account"
      plug :scrub_params, "studio"

      def create(conn, %{"account" => account_params, "studio" => studio_params}) do
      end

当有人没有发送正确的参数时,应用程序将返回Phoenix.MissingParamError错误。我如何拯救它并用json将漂亮的消息返回给用户?

您可以创建另一个函数头来处理这种情况。也许是这样的

def create(conn, %{"account" => account_params, "studio" => studio_params}) do 
  # handle request
end

def create(conn, params) do 
  # handle missing param
end

也许您可以使用Plug.ErrorHandler。像这样的

defmodule AppRouter do 
  use Plug.Router 
  use Plug.ErrorHandler 

  ... 

  def handle_errors(conn, %{kind: _kind, reason: _reason, stack: _stack}) do 
    send_resp(conn, conn.status, "Something went wrong") 
  end 
end

我在考虑这个问题,但是我需要对另一个不好的操作重复这个操作…在Phoenix 1.3中,您可以使用action_fallback并将错误处理移动到一个不同的错误控制器。这
Phoenix.MissingParamError
正在抛出我的
清除参数
对吗?在这种情况下,添加另一个子句(如现在的顶部答案)将不起作用。