2016-04-28 16 views
1

モデルのリモートフックをプログラムで実行する必要があります。どうやってやるの?私は、任意の解決策を見つけるとNode.js + Loopback:プログラムでリモートフックを実行

/** 
* 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); 
    }); 
}; 

使用例地雷を実施していなかった

+0

は、あなただけのあなたはそれが何をしたいのかないモデル内のメソッドを作成しないだろう。リモートフックは、他のメソッドの前または後に自動的に呼び出されます。自分で実行する独自のメソッドを作成する必要があると思います。 – jfriend00

+0

私はモデルAでリモート呼び出しを行います。オプションBを受け取ったときにモデルBが提供されていれば作成する必要があります。モデルB作成要求には、リモートフックがあります。今、このフックは、モデルBが作成され、モデルAの要求が実行されたときの2つのケースで実行する必要があります。リモートフックコードの重複を避けるための解決策を見つけようとしています –

+0

@MaximSharai私は同じ厄介な問題にぶつかっています。これをコードの複製以外の方法で見つけましたか? – jcragun

答えて

0

utils.execHooks(app, app.models.MyModel, model, 'before', 'create', ctx); 
関連する問題