2016-03-04 3 views
8

私はStrongloopの初心者で、私のレスポンスクラス(私が構築したオブジェクトのモデルスキーマ)をカスタマイズする方法に関する情報は見つけられません。 APIエクスプローラーでカスタムデータを使用してオブジェクトを表示します。Strongloopでカスタムリモートメソッドのカスタムスキーマを設定する方法

Capture for strongloop api explorer

例えば、私はと呼ばれるカスタムリモートメソッドを持って、私はチャレンジのためのパラメータdata代わりに、単一のパラメータのカスタムモデルスキーマではなく、モデルスキーマのために表示したい

POST /Challenges/score 

スコアボディのデータはすべてのパラメータを持ち、Data Type:Model Schemaでユーザーに表示されますが、これは可能ですか?

{ 
    "id": "string", 
    "limit": 0, 
    "order": "string", 
    "userId": "string" 
} 

一方、レスポンスクラスでは、レスポンスオブジェクトのスキーマを表示します。このような何か:

{ 
    "id":"string", 
    "userId":"string", 
    "user": {}, 
    "totalScore":0, 
    "tags": [] 
} 

私は別の質問(thisthis)を見て、この問題を解決するために何かを見つけることができません。ここで

更新

は、リモートメソッドの定義は

Challenge.remoteMethod('score', { 
    accepts: { arg: 'data', type: 'object', http: { source: 'body' } }, 
    returns: {arg: 'scores', type: 'array'}, 
    http: {path: '/score', verb: 'post'} 
}); 
+0

あなたが定義されてどのように私たちをご提示くださいリモートメソッド。 –

+0

@RaymondCamdenリモートメソッド – jrltt

+0

で質問を更新しましたので、あなたの正確な質問の解析に問題があります。データのカスタムセットを戻して、それを文書化したいと言っていますか?その場合は、結果を生成するために使用しているコード(スコア)を表示できますか?入力用に「データ」を定義したいと言っていますか? –

答えて

2

方法は、ヘルパーslc loopback: model

? Enter the model name: ArgChallenge 
? Select the data-source to attach ArgChallenge to: (no data-source) 
? Select model's base class PersistedModel 
? Expose ArgChallenge via the REST API? No 
? Common model or server only? server 

で、このように新しいモデルを作成することであると私はその後Challenge.jsに、プロパティを入れ続ける:

Challenge.remoteMethod('score', { 
    accepts: { arg: 'data', type: 'ArgChallenge', http: { source: 'body' } }, 
    returns: {arg: 'scores', type: 'array'}, 
    http: {path: '/score', verb: 'post'} 
}); 

これは機能します!誰かがこれを行うより良い方法を知っている場合は、共有してください。

7

である私は、あなたがstrongloopの公式ドキュメントを介して行っている場合があります信じています。そうでない場合は、リモートメソッドとその受け入れられたデータ型を説明するリンクがあります。 https://docs.strongloop.com/display/public/LB/Remote+methods

カスタムオブジェクトがチャレンジであると仮定すると、応答でオブジェクトを表示するには、タイプを指定する必要があります(タイプはループバックのデータ型またはカスタムモデルのいずれかです)。だから、チャレンジ次のコードを追加する必要が戻るには:

Challenge.remoteMethod('score', { 
    accepts: { arg: 'data', type: 'object', http: { source: 'body' } }, 
    returns: {arg: 'scores', type: 'Challenge', root: true}, 
    http: {path: '/score', verb: 'post'}, 
}); 

を指定した第二の矢印は、あなたのAPIコールで試してみたいのデフォルト値です。 デフォルトのをキーとして任意のカスタム文字列を渡すことができます。たとえば 、あなたには、いくつかのオブジェクト渡したい場合:

Challenge.remoteMethod('score', { 
    accepts: { 
     arg: 'data', 
     type: 'object', 
     default: '{ 
      "id": "string", 
      "userId": "string", 
      "user": {}, 
      "totalScore": 0, 
      "tags": [] 
     }', 
     http: { 
      source: 'body' 
     } 
    }, 
    returns: { 
     arg: 'scores', 
     type: 'Challenge' 
    }, 
    http: { 
     path: '/score', 
     verb: 'post' 
    } 
}); 

ので、応答のためには、モデルをカスタマイズすることはできませんが。しかし、デフォルト値を渡すためには、何かを文字列形式にすることができます。私はこの問題を解決することが分かっ

+0

申し訳ありません!最初は簡単なアイデアだと思ったが、試してみる時間がなかった。昨日私はそれを試しなければなりませんでした。今日まで、私はあなたに答えることができませんでした。デフォルトを定義するとき、ループバックはそれを無視し、ベースモデルの構造を表示し続けます – jrltt

0

@jrlttは、代わりにデフォルトを使用しての、タイプを指して使用・オブジェクトの構造を受け入れ、それが動作するはずです。注:httpソース:bodyが必要です。ランダムオブジェクトに

Challenge.remoteMethod('score', { 
    accepts: { 
     arg: 'data', 
     type: { 
      "id": "string", 
      "userId": "string", 
      "user": {}, 
      "totalScore": 0, 
      "tags": [] 
      }, 
     http: { 
      source: 'body' 
     } 
    }, 
    returns: { 
     arg: 'scores', 
     type: 'Challenge' 
    }, 
    http: { 
     path: '/score', 
     verb: 'post' 
    } 
}); 

モデル設定で利用可能で定義されたモデルまたはループバックモデルジェネレータを使用して作成し、そのモデル名は、タイプを指すために使用することができます。 だから、パラメータを受け入れるに表示するユーザーモデルを使用することができますループバックで

Challenge.remoteMethod('score', { 
    accepts: { 
     arg: 'data', 
     type: 'User', 
     http: { 
      source: 'body' 
     } 
    }, 
    returns: { 
     arg: 'scores', 
     type: 'Challenge' 
    }, 
    http: { 
     path: '/score', 
     verb: 'post' 
    } 
}); 
0

、遠隔引数はds.define(「YourCustomModelName」、のdataFormat)を使用して定義されているデータモデルを識別することができます。

はそうあなたのケースのために、リモートメソッド(ウル場合にスコア)が定義されていますChallenge.jsファイル内の関数を記述します。リモートの引数の下

const loopback = require('loopback'); 
const ds = loopback.createDataSource('memory'); 
module.exports = function(Challenge) { 
    defineChallengeArgFormat() ; 
// remote methods (score) defined 
}; 

let defineChallengeArgFormat = function() { 
    let dataFormat = { 
      "id": String, 
      "userId": String, 
      "user": {}, 
      "totalScore": Number, 
      "tags": [] 
     }; 
    ds.define('YourCustomModelName', dataFormat); 
}; 

「タイプ」の使用を入力します。「YourCustomModelName」

Challenge.remoteMethod('score', { 
     accepts: { 
      arg: 'data', 
      type: 'YourCustomModelName', 
      http: { 
       source: 'body' 
      } 
     }, 
     returns: { 
      arg: 'scores', 
      type: 'Challenge' 
     }, 
     http: { 
      path: '/score', 
      verb: 'post' 
     } 
    }); 

あなたは、サーバーとリフレッシュを再起動した後、それはエクスプローラ上で反映されるはずです:)

関連する問題