2014-12-22 9 views
7

Ich würde gerne wissen, ob es eine Möglichkeit gibt, einen bestimmten HTTP-Statuscode aus einer Remote-Methode zurück zu geben.Wie gebe ich bestimmte HTTP-Statuscodes von einer Remote-Methode im Loopback zurück?

Ich kann sehen, dass es eine Callback-Funktion gibt, die wir ein Fehlerobjekt übergeben können, aber wie definieren wir den HTTP-Statuscode?

+1

welche Technologie verwenden Sie? – nburk

+0

Wenn wir über loopback sprechen, hier eine Antwort der Autoren: https://groups.google.com/d/msg/loopbackjs/oK2g5A_h6vI/VNTD3_GDMQkJ – pulkitsinghal

Antwort

-1

Sie können jeden Statuscode wie in ExpressJS zurückgeben.

... 
res.status(400).send('Bad Request'); 
... 

Siehe http://expressjs.com/api.html

+0

Ich verstehe das; Aber wie bekommen Sie eine Instanz der Express-Antwort? – ppoliani

+0

Hängt davon ab, in welchem ​​Teil des Lebenszyklus Sie sich befinden. An einigen Stellen haben Sie Zugriff auf ctx. In diesem Fall können Sie 'ctx.req' verwenden. Es gibt auch große Diskussionen um getCurrentContext: https://github.com/strongloop/loopback/issues/1676. – superkhau

+2

Warum wird es abgelehnt? Es funktioniert und es ist nicht veraltet api, http://expressjs.com/en/api.html#res.status – cpxPratik

2

In Ihrer Remote-Registrierungsmethode:

YourModel.remoteMethod('yourMethod', { 
    accepts: [ 
     {arg: 'res', type: 'object', http:{source: 'res'}} 
    ], 
    ... 
    returns: {root: true, type: 'string'}, 
    http: {path: '/:id/data', verb: 'get'} 
    }); 
15

Wenn Sie einen HTTP-Statuscode verwenden einen Fehler zu benachrichtigen, einen Fehler in den Remote-Methoden übergeben kannst Callback-Methode:

var error = new Error("New password and confirmation do not match"); 
 
error.status = 400; 
 
return cb(error);

Sie mehr Informationen über das Fehlerobjekt finden Sie hier: Error object

Wenn Sie möchten nur die HTTP-Antwort-Status ändern, ohne einen Fehler zu verwenden, können Sie entweder durch #danielrvt definiert eine der beiden Methoden verwenden können, oder #superkhau. Um den Verweis auf das von #superkhau genannte Anfrageobjekt zu erhalten, können Sie in Ihrer Methodenregistrierung ein zusätzliches Argument definieren, das an Ihre Remote-Methode übergeben wird. Siehe HTTP mapping of input arguments

+1

Liefert das nicht einen gesamten Stack-Trace zurück? Wenn Sie '{status: 404, message: 'Not found'}' zurückgeben möchten, gibt es einen besseren Ansatz? – user3162553

0

Wenn Sie nur Antwortstatus ändern müssen, nur tun:

ctx.res.status(400); 
return cb(null); 
Verwandte Themen