2017-03-29 1 views
0

Ich möchte die response mit einer error in meiner Koa-App senden, wenn es keine sessionId .Ich erkundete Aber nichts hilfreich für mich, um das gleiche zu tun. Ich habe auch return ctx.throw(401); für unauthorized verwendet, aber es ist nicht gut, ctx.throw(401); senden nur die "nicht autorisierten", möchte ich einige spezifische Informationen hinzufügen und nach dem Hinzufügen senden Sie einfach die Antwort an den Client. kann mir jemand vorschlagen, was ich mache?Was ist der Ersatz von express res.send ({user: 'xyz'}); oder res.end() in koa?

Mein Code ist:

index.validateKey = async (ctx, next) => { 
    await new Promise((resolve, reject) => { 
     var authorized = ctx.headers.sessionid ? true : false; 
     if (!authorized) { 
      return ctx.throw(401); //HERE , I want to send . 
     } 
     resolve(); 
    }); 
    await next(); 
} 
+0

Warum verwenden Sie Async erwarten, wenn es keinen Async-Aufruf gibt? –

Antwort

0

Sie können sessionId überprüfen synchron, so dass keine Asynchron warten Funktion benötigt wird. Ihre Middleware-Funktion kann so sein.

async(ctx, next) => { 
    var authorized = ctx.headers.sessionid ? true : false; 
    if (!authorized) { 
     return ctx.throw('session Id required', 401);; 
     /*HERE , You can send custom message and return.*/ 
    } 
    /* call next middleware else*/ 
    await next(); 
}) 
+0

Danke Chetan, aber kann ich das Objekt in ctx.thwor() senden? –

+0

koa js verwendet https://github.com/jshttp/http-errors, um Fehler zu generieren, die eindeutig ** Nachricht - die traditionelle Fehlermeldung, die kurz gehalten werden sollte und alle einzeilig sein soll **, so dass Sie hier zwei Optionen haben, Sie können Objekt wie in der obigen Methode stringifizieren und senden. oder 'ctx.throw (401, 'errorstring', {error: 'object'});' fange dann das Fehlerobjekt in einem einzelnen try catch von koa und handle entsprechend. –

Verwandte Themen