web-dev-qa-db-ja.com

LoopBackリモートメソッドとモデルデータへのアクセス

私はこれに何時間も取り組んできましたが、ループバックのドキュメントが役に立たないため、完全に迷子になっています。

アプリケーションロジックをモデルに書き込もうとしています。そのためのドキュメントは ここ です。残念ながら、この例では、外部値をリモートメソッドに渡して、それを再度返す以外に役立つことは何も示されていません。このコンテキストでクエリを実行してモデルデータにアクセスする方法を理解したいのですが、何時間も検索したため、これらの単純なタスクでさえドキュメントを見つけることができませんでした。たぶん私は間違った場所を見ているだけです。誰か助けてもらえますか?

12
Michael.Lumley

通常、すべてのモデルが取得する組み込みメソッドを使用して、モデルデータのクエリやアクセス(CRUD操作)など、やりたいことのほとんどを実行できます。 http://docs.strongloop.com/display/LB/Working+with+data を参照してください。これらのリモートメソッド(カスタムRESTエンドポイント))の定義は冗長になります。

リモートメソッドコードで標準 model CRUD Node APIs (例:myModel.create()、myModel.find()、myModel.updateAll()))にアクセスする場合あなたはしたい。

さらに関連する例は https://github.com/strongloop/loopback-example-app-logic にもあります。

はじめにアプリを使用した例を次に示します https://github.com/strongloop/loopback-getting-started アプリ。これは、数値argを受け取り、そのIDを持つ喫茶店の名前をコンソールに出力するリモートメソッドを定義します。

このコードはcommon/models /coffeeshop.jsにあります。

module.exports = function(CoffeeShop) {
...
  // Return Coffee Shop name given an ID.
  
  CoffeeShop.getName = function(shopId, cb) {
    CoffeeShop.findById( shopId, function (err, instance) {
        response = "Name of coffee shop is " + instance.name;
        cb(null, response);
        console.log(response);
    });
  }
...
  CoffeeShop.remoteMethod (
    'getName', 
    {
      http: {path: '/getname', verb: 'get'},
      accepts: {arg: 'id', type: 'number', http: { source: 'query' } },
      returns: {arg: 'name', type: 'string'}
     }
  );
};

API Explorerを使用してロードすることができます http://0.0.0.0:3000/Explorer/#!/CoffeeShops/getName 次に、番号を入力します(アプリには最初は3つのコーヒーショップしかありません)。クエリパラメータを入力し、「試してみてください」をクリックします。

または、 http://0.0.0.0:3000/api/CoffeeShops/getid?id=1 のようなURLを取得します。

ランド

9
RandM

私はついに自分の問題を発見しました。オブジェクトプロパティは、CRUD操作を呼び出す関数のコールバックにロードする必要があります。次の構文は私のために働いた:

module.exports = function (TestModel) {
    TestModel.testRemoteMethod = function (id, name, cb) {
        TestModel.findOne({where: {id: id}}, function(err, modelInstance) {
            //modelInstance has properties here and can be returned to
            //the API call using the callback, for example:
            cb(null, {"name": modelInstance.name});
        }
    }
    TestModel.remoteMethod('testRemoteMethod',
        //..rest of config
2
Michael.Lumley