2015-03-20 11 views
5

Ich bin auf der Suche nach einer Möglichkeit, StrongLoop LoopBack HTTP-Antwort-Code und Header anzupassen.StrongLoop Loopback: Wie HTTP-Response-Code und Header anpassen

Ich möchte einige Geschäftsregeln des Unternehmens in Bezug auf REST API einhalten. Für ein in JSON beschriebenes Modell verfügt HTTP über HTTP, um auf eine POST-Anforderung mit einem Code 201 + header Content-Location zu antworten (anstelle des standardmäßigen Antwortcodes der Loopbacks 200 ohne Inhalt-Ort-Header).

Ist das mit LoopBack möglich?

+0

So .. Ich denke, Sie können dies mit einer [Middleware] (docs.strongloop.com/display/public/LB/Defining+middleware) tun, aber ich habe Probleme, ein Beispiel zu erarbeiten. Ich werde es trotzdem versuchen. – jakerella

Antwort

4

Leider ist der Weg, dies zu tun, ein wenig schwierig, da LoopBack nicht leicht zu ändern, Antworten aus der API. Stattdessen müssen Sie einen Code für jedes Modell in einem Boot-Skript hinzuzufügen, die die afterRemote Methode in mit Haken:

Innen /server/boot/ eine Datei hinzufügen (der Name ist nicht wichtig):

module.exports = function(app) { 

    function modifyResponse(ctx, model, next) { 
    var status = ctx.res.statusCode; 
    if (status && status === 200) { 
     status = 201; 
    } 
    ctx.res.set('Content-Location', 'the internet'); 
    ctx.res.status(status).end(); 
    } 

    app.models.ModelOne.afterRemote('**', modifyResponse); 
    app.models.ModelTwo.afterRemote('**', modifyResponse); 
}; 
+1

Danke jakerella, es funktioniert sehr gut und passt zu meinen Bedürfnissen! Ich wende es für alle meine App-Modelle an, wie zum Beispiel für (var model in app.models) app.models [model] .nachRemote ('**', modifyResponse); ' – Nicolas

+1

Um etwas für alle Modelle zu tun, scheint es, als könnten Sie gehen Sie auf diese Weise: http://docs.strongloop.com/display/public/LB/Remote+methods#Remotemethods-Formattingremotemethodresponses – neemzy

+2

'ctx.res.status (status) .end();' ist nicht eine gute Praxis, die Sie sollten Rufen Sie 'next()' auf und lassen Sie die remoteMethod-Kette weiterlaufen. –