lapis 이상 처리
3968 단어 frameworkswebnginxluaopenresty
잘못된 종류
Lapis
두 가지 오 류 를 구분 합 니 다. 복구 가능 과 복구 불가능 오류 입 니 다.Lua
실행 중 에 던 진 오류 나 호출 오 류 는 복구 할 수 없 는 것 으로 여 겨 집 니 다.(이것 도 포함 Lua
내장 함수 assert
)복구 할 수 없 는 오 류 는 사용자 에 게 포착 되 지 않 기 때문에
Lapis
이 를 포착 하여 브 라 우 저 에 이상 한 메 시 지 를 인쇄 합 니 다.실행 중인 모든 작업 이 중 단 될 수 있 습 니 다. Lapis
스 택 을 표시 하고 status
을 500
로 설정 합 니 다.이러한 유형의 오 류 는 보통 하나의
bug
또는 다른 심각 한 문제 이 며 복 구 돼 야 한다.복구 가능 한 오 류 는 사용자 제어 가 지정 한 오류 처리 함 수 를 실행 하기 위해 처리 함 수 를 중단 하 는 방식 입 니 다.그들 은
Lua
의 오류 시스템 이 아 닌 협 정 을 사용한다.예 를 들 어 사용자 의 잘못된 입력 이나 데이터베이스 에 없 는 기록 등 입 니 다.
복구 가능 한 오류 캡 처
capture_errors
도움말 프로그램 은 오 류 를 포착 하고 오류 처리 프로그램 을 실행 할 수 있 도록 조작 을 포장 하 는 데 사 용 됩 니 다.실행 중 오류 가 발생 했 습 니 다.실행 중 오 류 를 포착 하려 면
pcall
을 사용 해 야 합 니 다. 보통 Lua
에서 하 는 것 처럼.Lua
대부분의 다른 언어의 이상 개념 이 없다.반면 Lapis
협동 프로그램 을 이용 해 이상 처리 시스템 을 만 들 었 다.우 리 는 capture_errors
도움말 프로그램 을 사용 하여 잘못된 범 위 를 포착 해 야 한다 고 정의 합 니 다.그런 후에 우 리 는 yield_error
를 사용 하여 원시 적 인 오 류 를 던 질 수 있다.local lapis = require("lapis")
local app_helpers = require("lapis.application")
local capture_errors, yield_error = app_helpers.capture_errors, app_helpers.yield_error
local app = lapis.Application()
app:match("/do_something", capture_errors(function(self)
yield_error("something bad happened")
return "Hello!"
end))
오류 가 발생 했 을 때 무슨 일이 발생 합 니까?이 작업 은 첫 번 째 오류 에서 실행 을 멈 추고 오류 처리 프로그램 을 실행 합 니 다.기본 오류 처리 프로그램 은
self.errors
에 유사 한 배열 의 표를 설정 하고 되 돌려 줍 니 다 {render = true}
.보기에 서 이 오류 메 시 지 를 표시 할 수 있 습 니 다.이것 은 이름 이 붙 은 경로 가 있다 면 그 경로 의 보기 가 렌 더 링 될 것 임 을 의미 합 니 다.그리고 error
표 가 나 올 때 보 기 를 작성 해 야 합 니 다.사용자 정의 오류 처리 프로그램 이 있 으 려 면
table
호출 capture_errors
을 입력 할 수 있 습 니 다. (주의 self.errors
사용자 정의 처리 프로그램 전에 설정)app:match("/do_something", capture_errors({
on_error = function(self)
log_erorrs(self.errors) -- you would supply the log_errors function
return { render = "my_error_page", status = 500 }
end,
function(self)
if self.params.bad_thing then
yield_error("something bad happened")
end
return { render = true }
end
}))
capture_errors
처리 함 수 를 호출 할 때 들 어 오 는 table
의 첫 번 째 위치 값 을 조작 합 니 다.구축
JSON API
하고 있 으 면 lapis
다른 방법 capture_errors_json
을 제공 합 니 다. JSON
대상 에서 오류 가 발생 합 니 다. 다음 과 같 습 니 다.local lapis = require("lapis")
local app_helpers = require("lapis.application")
local capture_errors_json, yield_error = app_helpers.capture_errors_json, app_helpers.yield_error
local app = lapis.Application()
app:match("/", capture_errors_json(function(self)
yield_error("something bad happened")
end))
그리고 다음 과 같은 오 류 를 보 여 줍 니 다 (정확 한 것 을 사용 하 십시오
content-type
.{ errors: ["something bad happened"] }
assert_error
lua
에서 함수 가 실 패 했 을 때 습관 적 으로 nil
과 오류 메 시 지 를 되 돌려 줍 니 다.이 를 위해, 하나의 assert_error
도움말 프로그램 을 제공 했다.첫 번 째 매개 변수 가 falsey
nil
또는 false
라면 두 번 째 매개 변 수 는 오류 로 던 져 집 니 다. 그렇지 않 으 면 모든 매개 변 수 는 함수 에서 돌아 갑 니 다.assert_error
데이터 베 이 스 를 사용 하 는 방법 이 매우 편리 하 다.local lapis = require("lapis")
local app_helpers = require("lapis.application")
local capture_errors, assert_error = app_helpers.capture_errors, app_helpers.assert_error
local app = lapis.Application()
app:match("/", capture_errors(function(self)
local user = assert_error(Users:find({id = "leafo"}))
return "result: " .. user.id
end))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
fastify가 다른 프레임워크보다 얼마나 더 나은 성능을 발휘합니까?Fastify는 무엇입니까? Fastify 서버의 리소스를 효율적으로 처리하고 초당 serve the max 수를 requests 도와줍니다. 그것은 사용자 기반 때문이 아니라 사용 가능한 most fastest 프...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.