LAD와 KOA를위한 더 나은 오류 처리기.
ctx.throw굉장하게 만듭니다 (KOA-404 핸들러와 함께 가장 잘 사용됨)
ETIMEOUT 및 EBADFAMILY )를 감지하고 408 클라이언트 타임 아웃 오류를 보냅니다.<ul> 사용하는 HTML 오류 목록을 지원합니다.ctx.throw beautiful 메시지를 만듭니다 (예 : ctx.throw(404) 아름다운 오류 객체를 출력합니다)text/html , application/json 및 text 응답 유형을 지원합니다npm install --save koa-better-error-handler아마도 이것을 KOA-404 핸들러와 함께 사용해야합니다!
패키지는 네 가지 인수를 받아들이는 함수를 내보내고 있습니다 (순서대로).
cookiesKey - 기본값으로 falselogger - 기본값은 console 로 나타납니다useCtxLogger 기본값은 true 입니다stringify fast-safe-stringify 위한 기본값 ( JSON.stringify 또는 선호하는 경우 다른 옵션을 사용할 수도 있습니다) cookiesKey 통과하면 세션 지원이 추가됩니다. 쿠키 및 세션 (예 : 웹 서버)을 사용하는 경우 항상이 인수의 가치를 설정해야합니다.
컨텍스트 기반 로그를 쉽게 만들 수 있도록 ctx.logger 자동으로 인출 할 수 있으므로 logger 에 캐빈을 사용하는 것이 좋습니다.
이 패키지는 koa-generic-session 만 지원하며 아직 koa-session-store 지원하지 않습니다 (더 많은 통찰력은 Index.js의 코드 참조, 풀 요청을 환영합니다).
세션, 쿠키 또는 플래시 메시징에 대한 지원 없음 :
const errorHandler = require ( 'koa-better-error-handler' ) ;
const Koa = require ( 'koa' ) ;
const Router = require ( 'koa-router' ) ;
const koa404Handler = require ( 'koa-404-handler' ) ;
// initialize our app
const app = new Koa ( ) ;
// override koa's undocumented error handler
app . context . onerror = errorHandler ( ) ;
// specify that this is our api
app . context . api = true ;
// use koa-404-handler
app . use ( koa404Handler ) ;
// set up some routes
const router = new Router ( ) ;
// throw an error anywhere you want!
router . get ( '/404' , ctx => ctx . throw ( 404 ) ) ;
router . get ( '/500' , ctx => ctx . throw ( 500 ) ) ;
// initialize routes on the app
app . use ( router . routes ( ) ) ;
// start the server
app . listen ( 3000 ) ;
console . log ( 'listening on port 3000' ) ;세션, 쿠키 및 플래시 메시징에 대한 내장 지원 :
const errorHandler = require ( 'koa-better-error-handler' ) ;
const Koa = require ( 'koa' ) ;
const redis = require ( 'redis' ) ;
const RedisStore = require ( 'koa-redis' ) ;
const session = require ( 'koa-generic-session' ) ;
const flash = require ( 'koa-connect-flash' ) ;
const convert = require ( 'koa-convert' ) ;
const Router = require ( 'koa-router' ) ;
const koa404Handler = require ( 'koa-404-handler' ) ;
// initialize our app
const app = new Koa ( ) ;
// define keys used for signing cookies
app . keys = [ 'foo' , 'bar' ] ;
// initialize redis store
const redisClient = redis . createClient ( ) ;
redisClient . on ( 'connect' , ( ) => app . emit ( 'log' , 'info' , 'redis connected' ) ) ;
redisClient . on ( 'error' , err => app . emit ( 'error' , err ) ) ;
// define our storage
const redisStore = new RedisStore ( {
client : redisClient
} ) ;
// add sessions to our app
const cookiesKey = 'lad.sid' ;
app . use (
convert (
session ( {
key : cookiesKey ,
store : redisStore
} )
)
) ;
// add support for flash messages (e.g. `req.flash('error', 'Oops!')`)
app . use ( convert ( flash ( ) ) ) ;
// override koa's undocumented error handler
app . context . onerror = errorHandler ( cookiesKey ) ;
// use koa-404-handler
app . use ( koa404Handler ) ;
// set up some routes
const router = new Router ( ) ;
// throw an error anywhere you want!
router . get ( '/404' , ctx => ctx . throw ( 404 ) ) ;
router . get ( '/500' , ctx => ctx . throw ( 500 ) ) ;
// initialize routes on the app
app . use ( router . routes ( ) ) ;
// start the server
app . listen ( 3000 ) ;
console . log ( 'listening on port 3000' ) ; 예제 요청 :
curl -H " Accept: application/json " http://localhost/some-page-does-not-exist예제 응답 :
{
"statusCode" : 404 ,
"error" : " Not Found " ,
"message" : " Not Found "
} v3.0.5 기준으로 no_translate 의 오차 속성을 설정하여 오류가 자동으로 변환되는 것을 방지 할 수 있습니다 true
function middleware ( ctx ) {
const err = Boom . badRequest ( 'Uh oh!' ) ;
err . no_translate = true ; // <----
ctx . throw ( err ) ;
} app.context.api = true 또는 set ctx.api = true 를 지정하고 Mongoose 유효성 검사 오류 메시지가 둘 이상의 메시지가있는 경우 (예 : 여러 필드가 유효하지 않음) - err.message <li> 대신 쉼표로 결합됩니다.
따라서 API 오류 메시지가 Mongoose 유효성 검증에 대한 HTML 형식의 오류 목록을 반환 하려면 app.context.api = false , ctx.api = false 를 설정 하거나이 오류 처리기를 사용하기 전에 설정하지 않도록 설정하십시오.
try {
// trigger manual validation
// (this allows us to have a 400 error code instead of 500)
await company . validate ( ) ;
} catch ( err ) {
ctx . throw ( Boom . badRequest ( err ) ) ;
}오류 목록으로 :
{
"statusCode" : 400 ,
"error" : " Bad Request " ,
"message" : " <ul class= " text-left mb-0 " ><li>Path `company_logo` is required.</li><li>Gig description must be 100-300 characters.</li></ul> "
}오류없이 목록 :
{
"statusCode" : 400 ,
"error" : " Bad Request " ,
"message" : " Path `company_logo` is required., Gig description must be 100-300 characters. "
} 기본적으로 ctx.api 가 true 인 경우 err.message 에서 html-to-text가 호출되므로 모든 HTML 마크 업을 텍스트 형식으로 변환합니다.
또한 process.env.ERROR_HANDLER_BASE_URL , 예를 들어 ERROR_HANDLER_BASE_URL=https://example.com (avit trailing slash)에서 환경 변수에서 기본 URI를 지정할 수 있으며 <a href="/foo/bar/baz">Click here</a> 와 같은 HTML 링크는 [Click here][1] [1] 과 같은 html 링크를 </ 클릭합니다. https://example.com/foo/bar/baz 의 링크.
MIT © Nick Baugh