Koa 의 오류 처리

3152 단어 Koa오류 처리
express 에서 끝 에(err,req,res,next)미들웨어 라 는 성명 을 등록 하 는 방식 과 달리 koa 는 정반 대로 시작 부분 에 등록 합 니 다.

app.use(async (ctx, next) => {
 try {
  await next();
 } catch (err) {
  ctx.status = err.status || 500;
  ctx.body = err.message;
  ctx.app.emit("error", err, ctx);
 }
});
이런 절차 에서 어떤 잘못 도 이곳 으로 수렴 될 것 이다.이 때 오 류 를 페이지 에 편리 하 게 인쇄 할 수 있어 개발 이 편리 하 다.

+   ctx.app.emit('error', err, ctx);
koa 도 app 을 통 해 오 류 를 보 내 고 감청 app 의 error 사건 을 통 해 이러한 오 류 를 더욱 통일 적 으로 처리 하고 집중 적 으로 관리 하 는 것 을 권장 합 니 다.

app.on("error", (err, ctx) => {
 /*        :
  * log   
  *     
  *      
  *  ...
  */
});
페이지 에 잘못 캡 처 하고 인쇄 한 예제:

const Koa = require("koa");
const app = new Koa();

app.use(async (ctx, next) => {
 try {
  await next();
 } catch (err) {
  const status = err.status || 500;
  ctx.status = status;
  ctx.type = "html";
  ctx.body = `
  <b>${status}</b> ${err}
  `;
  // emmit
  ctx.app.emit("error", err, ctx);
 }
});

app.use(ctx => {
 const a = "hello";
 a = "hello world!"; // TypeError: Assignment to constant variable.
 ctx.body = a;
});

app.on("error", (err, ctx) => {
 console.error("Ooops..
", err); }); app.listen(3000);
node server.js 를 시작 한 후 페이지 를 방문 하면 명령 행 의 오류 출력 을 볼 수 있 습 니 다.
pm2 를 사용 하면-no-daemon 인 자 를 통 해 명령 행 에 머 물 러 출력 을 볼 수 있 습 니 다.
상기 인 자 를 사용 하지 않 으 면 pm2 logs[app-name]를 통 해 볼 수 있 습 니 다.
ctx.throw
소박 한 오류 방식 은 수 동 으로 상태 코드 와 정보 가 클 라 이언 트 에 대한 가시 성 을 설정 해 야 한다.

const err = new Error("err msg");
err.status = 401;
err.expose = true;
throw err;
expose 는 클 라 이언 트 에 게 오류 정 보 를 되 돌려 줄 지 여 부 를 결정 합 니 다.그렇지 않 으 면 상태 에 대응 하 는 오류 문안 만 보 여 줍 니 다.예 를 들 어 500 은 브 라 우 저 에서 Internal Server Error 로 보 여 줍 니 다. ctx.throw 이 helper 방법 을 통 해 더욱 간결 해 집 니 다.
위의 코드 세 션 은 다음 과 같 습 니 다.

ctx.throw(401, "err msg");
상태 코드 가 지정 되 지 않 으 면 기본 값 은 500 입 니 다.5xx 클래스 오류 expose 는 기본적으로 false 입 니 다.즉,오류 정 보 를 response 로 되 돌려 주지 않 습 니 다.
잘못 던 졌 을 때 추가 데 이 터 를 전달 할 수 있 습 니 다.이 데 이 터 는 오류 대상 에 합 쳐 져 오 류 를 처리 하 는 곳 에서 error 에서 가 져 올 수 있 습 니 다.

app.use(ctx => {
 ctx.throw(401, "access_denied", { user: { name: "foo" } });
});

app.on("error", (err, ctx) => {
 console.error("Ooops..
", err.user); });
레 퍼 런 스
Error Handling
ctx.throw
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기