2016-04-28 6 views
1

Ich muss Remote Hooks für ein Modell programmgesteuert ausführen. Wie kann ich das machen?Node.js + Loopback: Remote-Hooks programmgesteuert ausführen

+0

Wollen Sie nicht nur ein Verfahren, in dem Modell erstellen, das tut, was Sie es tun wollen . Remote Hooks werden automatisch vor oder nach anderen Methoden aufgerufen. Ich denke, du müsstest deine eigene Methode erstellen, um sie selbst auszuführen. – jfriend00

+0

Ich habe einen Remote-Aufruf in einem Modell A, wenn ich optional ein Modell B erhalte. Wenn das Modell B bereitgestellt wird, sollte ich es erstellen. Die Erstellungsanforderung für Modell B verfügt über Remote-Hooks. Nun sollten diese Hooks in zwei Fällen ausgeführt werden, wenn Modell B erstellt wird und wenn eine Anforderung für Modell A ausgeführt wird. Ich versuche, eine Lösung zu finden, um Remote-Code-Duplizierung zu vermeiden –

+0

@MaximSharai Ich laufe auf das gleiche lästige Problem. Haben Sie dafür eine andere Lösung gefunden, als Code zu duplizieren? – jcragun

Antwort

0

Ich fand keine Lösungen und implementiert Mine

/** 
* Trigger execution of remote hooks of a model 
* 
* @param app The loopback application 
* @param modelName The model name 
* @param data The model data 
* @param when The possible values are 'before' or 'after' 
* @param method The remote method name 
* @param ctx The hooks context 
* @param next 
*/ 
exports.execHooks = function(app, modelName, data, when, method, ctx, next) { 

    // Save original context values 
    var originalData = ctx.args.data || {}; 
    var originalMethod = ctx.method; 

    // Get shared method 
    var modelSharedClass = app.remotes().classes().filter(function(item) { 
    return item.name === modelName; 
    })[0]; 
    var modelSharedMethod = modelSharedClass.methods().filter(function(item) { 
    return item.name === method; 
    })[0]; 

    // Change context data 
    ctx.args.data = data; 
    ctx.method = modelSharedMethod; 
    ctx.methodString = modelSharedMethod.stringName; 

    // Execute hooks 
    var remoteObject = app.remoteObjects()[modelName]; 
    app.remotes().execHooks(when, modelSharedMethod, remoteObject, ctx, function(err) { 

    // Restore context data 
    var changedData = ctx.args.data; 
    ctx.args.data = originalData; 
    ctx.method = originalMethod; 
    ctx.methodString = originalMethod.stringName; 

    next(err); 
    }); 
}; 

Beispiel für die Verwendung:

utils.execHooks(app, app.models.MyModel, model, 'before', 'create', ctx); 
Verwandte Themen