在nodejs中未验证的swagger对象数组

问题描述 投票:0回答:1

我在nodejs应用程序中有一个swagger.yaml文件,如下所示

/updateuser/{userId}:
x-swagger-router-controller: User
put:
  tags:
    - User
  summary:  Update User
  description: Update User
  operationId: updateUser
  parameters:
    - name: userId
      in: path
      description: userId for which subscription needs to be updated
      type: string
      required: true
    - name: subData
      in: body
      description: Subscription To be updated
      schema:
       type: array
       items:
        $ref: "#/definitions/userDataInput"
  responses:
    "200":
      description: Success
      schema:
        $ref: "#/definitions/Response"
    "500":
      description: Error
      schema:
        $ref: "#/definitions/ErrorResponse"


definitions:            
 userDataInput:
 required:
  - productId
  - subscriptionId
 properties:
  productId:
    type: string
  subscriptionId:
    type: string    

现在我使用nodejs模块swagger-model-validator在我的用户控制器中验证subData,例如下面给出的代码

var yaml = require('js-yaml')
var fs = require('fs')
var swaggerObject
try {
swaggerObject = yaml.safeLoad(fs.readFileSync('swagger.yaml'), 'utf8')
} catch (err) {
 // Error here
}

var Validator = require('swagger-model-validator')
var validator = new Validator(swaggerObject)
var validation = validator.swagger.validateModel('subData', body, 
false, true)
if (validation.valid) {
// logic here 
} else {
// show error
}

用户将像PUT / updateuser / {userId}和body参数subData一样调用此API

[{
"userId": "DSHS333FHFHD",
"productId": "465454445",
},
"userId": "RYY48433FHFHD",
"productId": "435654125",
}
]

但问题是,它没有验证对象数组userDataInput,我已经给出了productId和subscriptionId必填字段,如果我省略了productId它没有给出任何错误,并且如果为ex productId1添加了一些额外的字段,它也没有验证。任何帮助。

javascript node.js swagger
1个回答
0
投票

我认为问题出在你正在创建的Swagger对象中。您可能最好直接使用验证器并手动传递模型。

validator.validate(object, swaggerModel, swaggerModels, allowBlankTarget, disallowExtraProperties);

您似乎是在Swagger定义中传递,而不是通常已经解码您的定义的swagger客户端。

swaggerModel将是您的subData架构部分,swaggerModels将是您的定义部分。

© www.soinside.com 2019 - 2024. All rights reserved.