2017-10-24 4 views
0

。私のモデルorder.jsonthe model accepts only predefined propertiesように、私は"strict": trueを設定ループバックモデルオブジェクト厳格なフィルタのJSON配列

{ 
    "name": "order", 
    "base": "PersistedModel", 
    "strict": true, 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "orderNo": { 
     "type": "string" 
    }, 
    "lines": { 
     "type": [ 
     { 
      "type": { 
      "description": "string", 
      "quantity": "number" 
      } 
     } 
     ] 
    } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": {} 
} 

です。しかし、このは、アレイlinesにプロパティの動作しません。

I.E.あなたはAPIへのこのオブジェクトを投稿する場合は、予想通りValidationErrorを(コード422)を取得:

{ 
    "orderNo": "xyz", 
    "someOtherProp": "hello", 
    "lines": [ 
    { 
     "description": "abc", 
     "quantity": 5 
    } 
    ] 
} 

をしかし、あなたは、このJSONオブジェクトのループバックを投稿する場合にMongoDBにオブジェクトを保存し

{ 
    "orderNo": "xyz", 
    "lines": [ 
    { 
     "description": "abc", 
     "quantity": 5, 
     "someOtherProp": "hello" 
    } 
    ] 
} 

私の質問はおよそですオブジェクトの配列を検証するためにモデルJSONに設定されるフラグがあれば?または、自分自身でネストされたドキュメントをorder.jsmodel extension file経由で検証する必要がありますか?

+0

を検証しますgithub.com/epoberezkin/ajv)を使用してモデルのプロパティを検証します。 – Syed

答えて

1

linesを別のモデルとして定義し、embedsManyorderモデルとの関係にしてください。 //:

ラインモデル

{ 
    "name": "line", 
    "base": "Model", 
    "strict": true, 
    "idInjection": true, 
    "properties": { 
     "description": { 
     "type": "string" 
     }, 
    "quantity":{ 
     "type":"number" 
     } 
    } 
} 

次モデル

{ 
    "name": "order", 
    "base": "PersistedModel", 
    "strict": true, 
    "idInjection": true, 
    "options": { 
     "validateUpsert": true 
    }, 
    "properties": { 
     "orderNo": { 
     "type": "string" 
     } 
    }, 
    "validations": [], 
    "relations": { 
     "lines":{ 
     "type": "embedsMany", 
     "model": "line", 
     "property": "lines" 
     } 
    }, 
    "acls": [], 
    "methods": {} 
} 

このようループバックは、あなたが[AJV JSONスキーマ検証](httpsを使用することができますlineモデル

+1

は絶対正しい。私はこのサイトを見落としました:[組込みモデルと関係](https://loopback.io/doc/en/lb3/Embedded-models-and-relations.html)。しかし、埋め込み定義で 'base:' Model "を必ず使用してください。 –

+0

はいあなたは正しいです@LonelyIsland私は答えを編集します。 –