Un meilleur manteau d'erreur pour Lad et Koa. Fait
ctx.throwgénial (mieux utilisé avec KOA-404-Handler)
ETIMEOUT et EBADFAMILY ) et envoie une erreur de délai de délai de client 408<ul> pour les erreurs de validation des mangoustes avec plus d'un messagectx.throw beaux messages (par exemple ctx.throw(404) publiera un bel objet d'erreur)text/html , application/json et les types de réponse textnpm install --save koa-better-error-handlerVous devriez probablement l'utiliser en combinaison avec KOA-404-Handler aussi!
Le package exporte une fonction qui accepte quatre arguments (dans l'ordre):
cookiesKey - par défaut est falselogger - par défaut à consoleuseCtxLogger - par défaut est truestringify - par défaut est à fast-safe-stringify (vous pouvez également utiliser JSON.stringify ou une autre option ici si préférée) Si vous passez un cookiesKey , le support pour les sessions sera ajouté. Vous devez toujours définir la valeur de cet argument si vous utilisez des cookies et des sessions (par exemple, serveur Web).
Nous vous recommandons d'utiliser Cabin pour votre logger et vous devriez également utiliser son ctx.logger , car il vous permet de faciliter les journaux contextuels.
Notez que ce package ne prend en charge que koa-generic-session et ne prend pas encore en charge koa-session-store (voir le code dans index.js pour plus d'informations, les demandes de traction sont les bienvenues).
Aucun support pour les séances, les cookies ou la messagerie 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' ) ;Prise en charge intégrée pour les séances, les cookies et la messagerie 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' ) ; Exemple de demande:
curl -H " Accept: application/json " http://localhost/some-page-does-not-existExemple de réponse:
{
"statusCode" : 404 ,
"error" : " Not Found " ,
"message" : " Not Found "
} Depuis la v3.0.5, vous pouvez empêcher une erreur de traduire automatiquement en définissant la propriété d'erreur de no_translate pour avoir une valeur de true :
function middleware ( ctx ) {
const err = Boom . badRequest ( 'Uh oh!' ) ;
err . no_translate = true ; // <----
ctx . throw ( err ) ;
} Si vous spécifiez app.context.api = true ou définissez ctx.api = true , et si un message d'erreur de validation Mongoose se produit qui a plus d'un message (par exemple, plusieurs champs étaient invalides) - alors err.message sera rejoint par une virgule plutôt que par <li> .
Par conséquent, si vous souhaitez que vos messages d'erreur API renvoient les listes d'erreurs formatées HTML pour la validation de Mongoose, définissez app.context.api = false , ctx.api = false , ou assurez-vous de ne pas les définir avant d'utiliser ce gestionnaire d'erreur.
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 ) ) ;
}Avec des listes d'erreur:
{
"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> "
}Sans listes d'erreur:
{
"statusCode" : 400 ,
"error" : " Bad Request " ,
"message" : " Path `company_logo` is required., Gig description must be 100-300 characters. "
} Par défaut, si ctx.api est vrai, alors HTML-Text sera invoqué sur l' err.message , convertissant ainsi tout le balisage HTML en format de texte.
Vous pouvez également spécifier un URI de base dans la variable d'environnement pour le rendu en tant que process.env.ERROR_HANDLER_BASE_URL , par exemple ERROR_HANDLER_BASE_URL=https://example.com (omettre track slash), et tous les liens html tels que <a href="/foo/bar/baz">Click here</a> [Click here][1] [1] Lien annexé de https://example.com/foo/bar/baz .
MIT © Nick Baugh