2016-08-01 9 views
0

Ich habe ein Modell als PersistedModel definiert, daher ist es mit einer Mongodb-Sammlung verwandt. Ich möchte folgendes erreichen:strongloop: Standardmethode auf PersistedModel ausblenden

  1. Standard crud Methoden versteckt werden
  2. eine benutzerdefinierte Remote-Methode ausgesetzt und GET / auf der Route zugeordnet werden (die eine myModel.find() Standardeinstellung)

Bisher konnte ich nicht beide Anforderungen erhalten: Wenn ich das Modell auf öffentlich setze, kommt es mit dem gesamten Satz von integrierten Methoden auf Standard Routen, wenn ich es nicht öffentlich setze Sogar meine benutzerdefinierten Fernbedienungen sind versteckt.

Antwort

1

Das Funktion, die Sie suchen, ist:

MyModel.disableRemoteMethod(name, [isStatic]) 

Hier sind die API docs.

Leider müssen Sie jedes Verfahren einzeln deaktivieren ...

Eine andere Lösung zwei verschiedene Modelle wäre zu schaffen, eine öffentliche und eine nicht (Sie können die Public boolean false in der server/model-config.json Datei ändern. Sie brauche nicht das „public“ Modell zu einer Datenquelle zu befestigen.

"MyPublicModel": { 
    "dataSource": null, 
    "public": true 
}, 
"MyPrivateModel": { 
    "datasource": "db", 
    "public": false 
} 

das Öffentlichkeit gerichtete Modell der Basisklasse sein würde Model, während das nicht-öffentliche Modell noch ein PersistedModel mit keinem ihrer Endpunkten wäre ausgesetzt Sie haben Zugriff auf die Funktionen des "Private" Modell durch Aufruf MyPublicModel.app.models.MyPrivateModel innerhalb der MyPublicModel.js Datei.

(Bitte kommentieren, wenn Sie irgendwelche Klarstellungen benötigen).

+0

danke für den Austausch. Ich persönlich fühle mich mit der folgenden Option wohl, indem ich eine disableAllMethodsButRemotes-Funktion definiere – balanza

+0

oh schön, habe nicht gemerkt, dass du es warst, der den Workaround gefunden hat! – richardpringle

0

Ich löste dadurch ol 'schmutzige Workaround. Ich habe es unter folgender Adresse gefunden: https://github.com/strongloop/loopback/issues/651.

in der Datei meines Modells

module.exports = function(myModel) { 
    utils.disableAllMethodsButRemotes(myModel); 
}; 

in meiner utils.js Bibliotheksdatei:

ich endlich diesen Schnipsel herauskam

exports.disableAllMethodsBut = function(model, methodsToExpose) { 
    if (model && model.sharedClass) { 
     methodsToExpose = methodsToExpose || []; 

     var modelName = model.sharedClass.name; 
     var methods = model.sharedClass.methods(); 
     var relationMethods = []; 
     var hiddenMethods = []; 

     try { 
      Object.keys(model.definition.settings.relations).forEach(function(relation) { 
      relationMethods.push({ 
       name: '__findById__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__destroyById__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__updateById__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__exists__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__link__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__get__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__create__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__update__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__destroy__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__unlink__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__count__' + relation, 
       isStatic: false 
      }); 
      relationMethods.push({ 
       name: '__delete__' + relation, 
       isStatic: false 
      }); 
     }); 
    } catch (err) {} 

    methods.concat(relationMethods).forEach(function(method) { 
     var methodName = method.name; 
     if (methodsToExpose.indexOf(methodName) < 0) { 
      hiddenMethods.push(methodName); 
      model.disableRemoteMethod(methodName, method.isStatic); 
     } 
    }); 

    if (hiddenMethods.length > 0) { 
     console.log('\nRemote mehtods hidden for', modelName, ':', hiddenMethods.join(', '), '\n'); 
     } 
    } 
}; 

exports.disableAllMethodsButRemotes = function disableAllMethodsBut(model) { 
    var remotes = Object.keys(model.definition.settings.methods || {}); 
    return exports.disableAllMethodsBut(model, remotes); 
}; 

ich es hilft zu Hause jemand

Verwandte Themen