Pemegang kesalahan yang lebih baik untuk LAD dan KOA. Membuat
ctx.throwmengagumkan (paling baik digunakan dengan koa-404-handler)
ETIMEOUT dan EBADFAMILY ) dan mengirimkan 408 kesalahan batas waktu klien<ul> untuk kesalahan validasi mongoose dengan lebih dari satu pesanctx.throw Pesan yang indah (mis ctx.throw(404)text/html , application/json , dan Jenis Respons textnpm install --save koa-better-error-handlerAnda mungkin harus menggunakan ini dalam kombinasi dengan KOA-404-handler juga!
Paket mengekspor fungsi yang menerima empat argumen (secara berurutan):
cookiesKey - default ke falselogger - default ke consoleuseCtxLogger - default ke truestringify -Default untuk fast-safe-stringify (Anda juga dapat menggunakan JSON.stringify atau opsi lain di sini jika disukai) Jika Anda melewati cookiesKey maka dukungan untuk sesi akan ditambahkan. Anda harus selalu menetapkan nilai argumen ini jika Anda menggunakan cookie dan sesi (misalnya server web).
Kami menyarankan untuk menggunakan kabin untuk logger Anda dan Anda juga harus menggunakan middleware-nya juga, karena akan memopulasi ctx.logger secara otomatis bagi Anda untuk membuat log berbasis konteks mudah.
Perhatikan bahwa paket ini hanya mendukung koa-generic-session , dan belum mendukung koa-session-store (lihat kode di index.js untuk wawasan lebih lanjut, permintaan tarik dipersilakan).
Tidak ada dukungan untuk sesi, cookie, atau pesan flash:
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' ) ;Dukungan bawaan untuk sesi, cookie, dan pesan flash:
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' ) ; Contoh Permintaan:
curl -H " Accept: application/json " http://localhost/some-page-does-not-existContoh Respons:
{
"statusCode" : 404 ,
"error" : " Not Found " ,
"message" : " Not Found "
} Pada v3.0.5, Anda dapat mencegah kesalahan diterjemahkan secara otomatis dengan mengatur properti kesalahan no_translate untuk memiliki nilai true :
function middleware ( ctx ) {
const err = Boom . badRequest ( 'Uh oh!' ) ;
err . no_translate = true ; // <----
ctx . throw ( err ) ;
} Jika Anda menentukan app.context.api = true atau atur ctx.api = true , dan jika pesan kesalahan validasi mongoose terjadi yang memiliki lebih dari satu pesan (misalnya beberapa bidang tidak valid) - maka err.message akan bergabung dengan koma alih -alih dengan <li> .
Oleh karena itu, jika Anda ingin pesan kesalahan API Anda mengembalikan daftar kesalahan yang diformat HTML untuk validasi Mongoose, lalu atur app.context.api = false , ctx.api = false , atau cukup pastikan untuk tidak mengaturnya sebelum menggunakan penangan kesalahan ini.
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 ) ) ;
}Dengan daftar kesalahan:
{
"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> "
}Tanpa daftar kesalahan:
{
"statusCode" : 400 ,
"error" : " Bad Request " ,
"message" : " Path `company_logo` is required., Gig description must be 100-300 characters. "
} Secara default jika ctx.api benar, maka html-to-text akan dipanggil pada err.message , sehingga mengubah semua markup HTML menjadi format teks.
Anda juga dapat menentukan uri basis dalam variabel lingkungan untuk rendering sebagai process.env.ERROR_HANDLER_BASE_URL , misalnya ERROR_HANDLER_BASE_URL=https://example.com (empuk di sini], dan tautan html seperti <a href="/foo/bar/baz">Click here</a> [a href = "/foo/batang/baz" di [Click here][1] [1] Tautan ditambahkan https://example.com/foo/bar/baz .
MIT © Nick Baugh