2016-08-18 3 views
1

Ich versuche, die folgende Sache zu tun:Welchen Loopback-Haken sollte ich verwenden?

Ich habe ein Modell, sagen myModel, die eine Methode hat, um etwas zu berechnen. I definiert diese Funktion durch so etwas wie dies in der MyModel.js Datei zu schreiben:

MyModel.prototype.calculateSomething = function(cb){ 
    ... 
    return cb(null,result) 
} 

Jetzt möchte ich das Ergebnis von calculateSomething im json aufzunehmen, wenn eine Instanz von MyModel aus der api zurückgegeben.

Wie mache ich das? Ich habe versucht, den "geladenen" Hook zu verwenden, aber ich glaube, dass dieser Hook ausgeführt wird, bevor die MyModel-Instanz erstellt wird, sodass ich dort die Methode calculateSomehing nicht aufrufen kann.

EDIT: Es stellt sich heraus, dass ich nur den "geladenen" Haken verwenden kann. Ich kann die ctx.instance im Hook verwenden, um das Objekt zu erhalten.

Ich war durch die Dokumentation verwirrt: "LoopBack ruft diesen Hook auf, nachdem der Connector Daten abruft, aber vor dem Erstellen einer Modellinstanz aus diesen Daten". Ist die Dokumentation falsch oder missverstehe ich sie?

Antwort

1

Wie wäre es Remote Hooks mit (auf mymodel.js):

// run before any static method eg. MyModel.find 
MyModel.beforeRemote('*', function(ctx, myModel, next) { 
    myModel.calculateSomething(function(err, something) { 
    if (err) throw err 

    myModel.something = something 
    next() 
    }) 
}); 

ODER

Wenn Sie es auf Objektinitialisierung Phase tun müssen (während Betrieb Haken loaded scheint nicht zu funktionieren) Vielleicht können Sie versuchen, das Modell Hook afterInitialize unter der Annahme, dass kein async Aufruf von calculateSomething:

OR

Wie unten diskutiert, wenn Sie das tun Anruf async benötigen und/oder wollen diese Logik auf Unterklassen haben, ich glaube, Sie createSomething nicht als Objekt/Prototyp Verfahren implementiert, sondern als mixins in Betracht ziehen sollten. Ich habe das zwar nicht persönlich ausprobiert, aber es sieht gut für Sie aus.

+0

Danke für Ihre Antwort! Ich habe das nicht getestet, aber ich erwarte, dass dies fehlschlägt, wenn ich eine Anfrage wie GET api/relatedmodel/id/mymodels mache? In diesem Fall würde ich eine Liste von myModel-Objekten mit jeweils einem etwas Feld erhalten wollen. –

+0

Ich glaube nicht, dass es funktionieren würde, wenn das myModel im JSON eines verwandten Modells enthalten ist? –

+0

Ich verstehe. Wie wäre es mit afterInitialize (Antwort aktualisiert)? –

Verwandte Themen