lapis 이상 처리

lapis 이상 처리
잘못된 종류Lapis 두 가지 오 류 를 구분 합 니 다. 복구 가능 과 복구 불가능 오류 입 니 다.Lua 실행 중 에 던 진 오류 나 호출 오 류 는 복구 할 수 없 는 것 으로 여 겨 집 니 다.(이것 도 포함 Lua 내장 함수 assert)
복구 할 수 없 는 오 류 는 사용자 에 게 포착 되 지 않 기 때문에 Lapis 이 를 포착 하여 브 라 우 저 에 이상 한 메 시 지 를 인쇄 합 니 다.실행 중인 모든 작업 이 중 단 될 수 있 습 니 다. Lapis 스 택 을 표시 하고 status500 로 설정 합 니 다.
이러한 유형의 오 류 는 보통 하나의 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))

좋은 웹페이지 즐겨찾기