Ein besserer Fehlerhandler für Lad und KOA. Macht
ctx.throwgroßartig (am besten mit Koa-404-Handler verwendet)
ETIMEOUT und EBADFAMILY ) und sendet 408 Client Timeout -Fehler<ul> für Mongoose -Validierungsfehler mit mehr als einer Nachrichtctx.throw schöne Nachrichten (z. B. ctx.throw(404) gibt ein schönes Fehlerobjekt aus) aus.text/html , application/json und textnpm install --save koa-better-error-handlerSie sollten dies wahrscheinlich auch in Kombination mit KOA-404-Handler verwenden!
Das Paket exportiert eine Funktion, die vier Argumente (in der Reihenfolge) akzeptiert:
cookiesKey - Standards zu falselogger - Standard für consoleuseCtxLogger - standardmäßig truestringify -STATIONS-STEUTIGUNGEN ZU fast-safe-stringify (Sie können hier auch JSON.stringify oder eine andere Option verwenden, falls bevorzugt). Wenn Sie einen cookiesKey übergeben, wird die Unterstützung für Sitzungen hinzugefügt. Sie sollten den Wert dieses Arguments immer festlegen, wenn Sie Cookies und Sitzungen verwenden (z. B. Webserver).
Wir empfehlen, Kabine für Ihren logger zu verwenden, und Sie sollten auch seine Middleware verwenden, da es ctx.logger automatisch bevölkert, damit Sie kontextbasierte Protokolle einfacher machen.
Beachten Sie, dass dieses Paket nur koa-generic-session unterstützt und koa-session-store noch nicht unterstützt (den Code in Index.js für weitere Einblicke finden Sie willkommen).
Keine Unterstützung für Sitzungen, Cookies oder Flash -Nachrichten:
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' ) ;Eingebaute Unterstützung für Sitzungen, Cookies und Flash-Nachrichten:
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' ) ; Beispielanforderung:
curl -H " Accept: application/json " http://localhost/some-page-does-not-existBeispielantwort:
{
"statusCode" : 404 ,
"error" : " Not Found " ,
"message" : " Not Found "
} Ab V3.0.5 können Sie verhindern, dass ein Fehler automatisch übersetzt wird, indem die Fehlereigenschaft von no_translate festgelegt wird, um einen Wert von true zu haben:
function middleware ( ctx ) {
const err = Boom . badRequest ( 'Uh oh!' ) ;
err . no_translate = true ; // <----
ctx . throw ( err ) ;
} Wenn Sie app.context.api = true oder ctx.api = true festlegen und wenn eine Mongoose -Validierungsfehlermeldung auftritt, die mehr als eine Nachricht enthält (z. B. mehrere Felder waren ungültig), dann wird err.message von einem Komma anstelle von <li> verbunden.
Wenn Sie also möchten, dass Ihre API -Fehlermeldungen die Fehlerlisten für die HTML -Formatierung für die Mongoose -Validierung zurückgeben, setzen Sie app.context.api = false , ctx.api = false , oder stellen Sie einfach sicher, dass Sie sie nicht vor verwenden, bevor Sie diesen Fehlerhandler verwenden.
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 ) ) ;
}Mit Fehlerlisten:
{
"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> "
}Ohne Fehlerlisten:
{
"statusCode" : 400 ,
"error" : " Bad Request " ,
"message" : " Path `company_logo` is required., Gig description must be 100-300 characters. "
} Standardmäßig, wenn ctx.api wahr ist, wird HTML-to-Text auf die err.message aufgerufen, wodurch das gesamte HTML-Markup in Textformat konvertiert wird.
Sie können auch eine Basis -URI in ERROR_HANDLER_BASE_URL=https://example.com Umgebungsvariablen für <a href="/foo/bar/baz">Click here</a> Rendern als process.env.ERROR_HANDLER_BASE_URL [1] [Click here][1] Link angehängt von https://example.com/foo/bar/baz .
Mit © Nick Baugh