环回模型 json 对象数组严格过滤

loopback model json array of objects strict filter

我正在使用 strongloop loopback v3 REST API 和 mongoDB 作为数据源。我的模型 order.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": {}
}

我设置 "strict": true 以便 the model accepts only predefined properties。但是这个 对数组 lines.

中的属性不起作用

即如果你 post 这个对象到 API 你会得到一个预期的 ValidationError (代码 422):

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

但是如果你post这个JSON对象环回保存对象到mongoDB

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

我的问题是关于模型 JSON 中是否要设置任何标志来验证对象数组?或者我是否必须通过 order.js model extension file?

自己验证嵌套文档

lines定义为另一个模型,并使其与order模型中的类型embedsMany相关联。

线条模型

{
    "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": {}
}

这种方式环回将验证 line 模型