Plug.ErrorHandler 및 Plug.Debugger로 Phoenix 표준 오류 사용자 정의
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.exdefmodule 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.exdefmodule 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) .
Reference
이 문제에 관하여(Plug.ErrorHandler 및 Plug.Debugger로 Phoenix 표준 오류 사용자 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ngmr_mo/items/7d03ac5d616aa8a42488
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
예를 들어 라우팅 미정의의 패스에 액세스했을 때, 디폴트라면 각각의 버젼으로 이하와 같은 리스폰스가 돌려주어집니다 (
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) .
Reference
이 문제에 관하여(Plug.ErrorHandler 및 Plug.Debugger로 Phoenix 표준 오류 사용자 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ngmr_mo/items/7d03ac5d616aa8a42488
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
# ...
Plug.Debugger, 공식 doc 이외에 기사가 없었습니다 ...
2018은 Phoenix나 cowboy에서 업무를 진행해 왔습니다만, 2019도 신세를 집니다 🙇♂️
Phoenix의 디버그 화면을 명확한 사양으로 해 놀고 있다 (Plug.Debugger에 style 옵션 건네주었다) 피 c. 라고 r. 코 m/y6 푹신 0w — nagimaru (@ngmr_mo) .
Reference
이 문제에 관하여(Plug.ErrorHandler 및 Plug.Debugger로 Phoenix 표준 오류 사용자 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ngmr_mo/items/7d03ac5d616aa8a42488텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)