2016-04-28 17 views
1

Мне нужно программно запускать удаленные крючки для модели. Как я могу это сделать?Node.js + Loopback: программно запускать удаленные крючки

+0

Вы бы не просто создать метод в модели, которая делает то, что вы хотите, чтобы это сделать , Удаленные крючки вызываются автоматически до или после других методов. Я думаю, вам придется создать свой собственный метод для их выполнения самостоятельно. – jfriend00

+0

У меня есть удаленный вызов в модели A, когда я опционально получаю модель B. Если модель B предоставляется, я должен ее создать. Запрос на создание модели B имеет удаленные крючки. Теперь эти крючки должны выполняться в двух случаях, когда создается модель B и когда выполняется запрос для модели A. Я пытаюсь найти решение, чтобы избежать дублирования кода дубликатов кода –

+0

@MaximSharai Я столкнулся с той же досадной проблемой. Вы нашли решение для этого, кроме дублирующего кода? – jcragun

ответ

0

я не нашел каких-либо решений и реализованы шахты

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

Пример использования:

utils.execHooks(app, app.models.MyModel, model, 'before', 'create', ctx); 
Смежные вопросы