Plug.ErrorHandler 및 Plug.Debugger로 Phoenix 표준 오류 사용자 정의

6140 단어 ElixirPhoenix
이 문서는 Elixir Advent Calendar 2018의 16 일째입니다.

1년 미만 Phoenix에서 API 서버를 작성해 온 가운데 얻은, Phoenix가 표준으로 돌려주는 에러 렌스폰스에 대한 지견을 소개합니다

전제



이 기사에서 "표준 오류"는 Phoenix가 마음대로 취급하는 종류의 오류입니다. 라우팅 미정도리나 문법 실수로 화가 났을 때 나오는 것입니다.
(최적의 표현이 있으면 알려주세요 🙇‍♂️)

오류시 응답 사용자 정의



예를 들어 라우팅 미정의의 패스에 액세스했을 때, 디폴트라면 각각의 버젼으로 이하와 같은 리스폰스가 돌려주어집니다 ( MIX_ENV=dev 그러면 디버그 화면이 나옵니다)

Phoenix1.4
"Not Found"

# phx.newの際に '--no-html --no-webpack' を付けた場合
# (吐き出される lib/views/error_view.ex が変わる)
{"errors":{"detail":"Not Found"}}

Phoenix 1.3 이하
"Page not found"

여기의 형식을 통째로 덮어쓰고 싶은 경우는 아래와 같이 Plug.ErrorHandler.handle_errors 를 스스로 써 Router내에서 use 합니다

lib/hoge_web/router_err_handler.ex
defmodule HogeWeb.RouterErrHandler do
  @moduledoc ""

  defmacro __using__(_) do
    quote do
      use Plug.ErrorHandler

      def handle_errors(conn, %{reason: %Phoenix.Router.NoRouteError{}}) do
        conn
        |> put_status(404)
        |> json(%{message: "Not Found"})
      end

      def handle_errors(conn, _) do
        conn
        |> put_status(500)
        |> json(%{message: "Internal Server Error"})
      end

    end
  end
end

lib/hoge_web/router.ex
defmodule HogeWeb.Router do
  use HogeWeb, :router
  use HogeWeb.RouterErrHandler
  # ...

그러나 이들은 MIX_ENV=dev 때 디버그 화면을 덮어 씁니다.

디버그 화면을 멋지게 살펴보기



너무 많이 사용할 수는 없지만, MIX_ENV=dev 때 디버그 화면을 사용자 정의하는 방법이 일단 준비되어 있습니다

이런 느낌



(나토리 사나 짱 틱)


Plug.Debugger로 할 수 있습니다.



lib/hoge_web/endpoint.ex

defmodule HogeWeb.Endpoint do
  use Phoenix.Endpoint, otp_app: :hoge

  if Mix.env == :dev do
    use Plug.Debugger,
      otp_app: :hoge,
      style: [primary: "#eb9dc7", accent: "#eb9dc7", logo: "data:image/png;base64,..."]
  end
  # ...
:style 이외에도 이 화면에 들어온 값을 받고 어쩌면 하는 함수를 건네줄 수도 있습니다( :banner )

자세한 내용은 여기 htps : // 에 x도 cs. pm/p㎅g/P㎅g. 로 부숴 r. HTML

요약



Plug.Debugger, 공식 doc 이외에 기사가 없었습니다 ...
2018은 Phoenix나 cowboy에서 업무를 진행해 왔습니다만, 2019도 신세를 집니다 🙇‍♂️

Phoenix의 디버그 화면을 명확한 사양으로 해 놀고 있다 (Plug.Debugger에 style 옵션 건네주었다) 피 c. 라고 r. 코 m/y6 푹신 0w — nagimaru (@ngmr_mo) .

좋은 웹페이지 즐겨찾기