ตัวจัดการข้อผิดพลาดที่ดีกว่าสำหรับ LAD และ KOA ทำให้
ctx.throwยอดเยี่ยม (ใช้ดีที่สุดกับ KOA-404-handler)
ETIMEOUT และ EBADFAMILY ) และส่งข้อผิดพลาดการหมดเวลาไคลเอนต์ 408<ul> สำหรับข้อผิดพลาดการตรวจสอบ Mongoose ที่มีข้อความมากกว่าหนึ่งข้อความctx.throw ข้อความที่สวยงาม (เช่น ctx.throw(404) จะส่งออกวัตถุข้อผิดพลาดที่สวยงาม)text/html , application/json และประเภทการตอบกลับ textnpm install --save koa-better-error-handlerคุณควรจะใช้สิ่งนี้ร่วมกับ KOA-404-handler ด้วย!
แพ็คเกจส่งออกฟังก์ชั่นที่ยอมรับอาร์กิวเมนต์สี่ข้อ (ตามลำดับ):
cookiesKey - ค่าเริ่มต้นเป็น falselogger - ค่าเริ่มต้นเป็น consoleuseCtxLogger - ค่าเริ่มต้นเป็น truestringify ค่าเริ่มต้นเป็น fast-safe-stringify (คุณยังสามารถใช้ JSON.stringify หรือตัวเลือกอื่นได้ที่นี่หากต้องการ) หากคุณผ่าน cookiesKey การสนับสนุนการประชุมจะถูกเพิ่ม คุณควรตั้งค่าค่าอาร์กิวเมนต์นี้เสมอหากคุณใช้คุกกี้และเซสชัน (เช่นเว็บเซิร์ฟเวอร์)
เราขอแนะนำให้ใช้ห้องโดยสารสำหรับ logger ของคุณและคุณควรใช้มิดเดิลแวร์ด้วยเช่นกันเนื่องจากจะมีการเติม ctx.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 ของคุณส่งคืนรายการข้อผิดพลาดที่จัดรูปแบบ HTML สำหรับการตรวจสอบ Mongoose จากนั้นตั้งค่า 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 เป็นจริงดังนั้น html-to-text จะถูกเรียกใช้เมื่อ err.message ดังนั้นการแปลงมาร์กอัป HTML ทั้งหมดเป็นรูปแบบข้อความ
นอกจากนี้คุณยัง <a href="/foo/bar/baz">Click here</a> ระบุ URI พื้นฐานในตัวแปรสภาพแวดล้อมสำหรับการเรนเดอร์เป็น process.env.ERROR_HANDLER_BASE_URL , เช่น ERROR_HANDLER_BASE_URL=https://example.com [Click here][1] [1] ลิงก์ผนวกของ https://example.com/foo/bar/baz
mit © Nick Baugh