簡體   English   中英

Swagger Nodejs - 響應驗證失敗

[英]Swagger Nodejs - Response Validation Failed

我正在用 Swagger 和 NodeJS 構建 API,到目前為止我遇到的惱人問題是 Swagger 驗證響應,但它並不總是順利。

我的情況:

在 file.yaml 中:我用 Swagger 編輯器檢查了 yaml 語法 => 文件 Yaml 是正確的。

/user/createNew:
x-swagger-router-controller: xxxxxxx
post:
  tags:
  - User
  summary: Create New User
  # used as the method name of the controller
  operationId: createNewUser
  parameters:
    - name: NewUserReq
      in: body
      required: true
      description: Email register
      schema:
        $ref: "#/definitions/NewUserReq"

  responses:
    "201":
      description: Successful
      schema:
        # a pointer to a definition
        $ref: "#/definitions/CreateUserResp"
    # responses may fall through to errors
    default:
      description: Error
      schema:
        $ref: "#/definitions/ErrorResponse"


CreateUserResp:
properties:
  status:
    type: integer
    description: Response status
  response:
    $ref: "#/definitions/MsgResponse"
MsgResponse:
  required:
    - resp_msg
  properties:
    resp_msg:
     type: string

為了檢查響應格式,我從 Swagger Editor 生成了 NodeJs 文件

 examples['application/json'] = {
    "response" : {
        "resp_msg" : "aeiou"
     },
    "status" : 123
 };

在 controller 文件.js 中:

function createNewUser(req,res){
....

var resp = new Object();
resp.resp_msg=data.email;
final_response.status = 200;
final_response.response = resp;

console.log("createNewUser::Query succeffully", JSON.stringify(final_response)); 
//{"status":200,"response":{"resp_msg":"test@gmail.com"}}

res.set('Content-Type', 'application/json');
res.json(final_response);
}

嘗試使用 Postman 運行 API,錯誤發生在以下日志中:

Error: Response validation failed: failed schema validation
at throwErrorWithCode (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/lib/validators.js:121:13)
at Object.module.exports.validateAgainstSchema (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/lib/validators.js:176:7)
at /var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/middleware/swagger-validator.js:141:22
at /var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:356:13
at async.forEachOf.async.eachOf (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:233:13)
at _asyncMap (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:355:9)
at Object.map (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:337:20)
at validateValue (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/middleware/swagger-validator.js:134:11)
at ServerResponse.res.end (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/middleware/swagger-validator.js:252:9)
at ServerResponse.send (/var/app/current/node_modules/express/lib/response.js:205:10)

我無法弄清楚是什么導致了錯誤,我仔細檢查了 JSON 響應的結構。

非常感謝任何建議。

您已輸入required: true這意味着您必須傳遞該參數,否則將出現響應驗證失敗

我試圖重現,但它給了我一些錯誤。 但是,我嘗試刪除MsgResponse並將CreateUserResp定義為單個定義,並且它起作用了:

CreateUserResp:
  type: object
  properties:
    response:
      type: object
      properties:
        resp_msg:
          type: string
          description: The response object
    status:
      type: number
      description: The status code

似乎您沒有將response定義為對象,而只是向其添加了一些屬性。

在嘗試了一些實驗之后,我讓它工作了。 我的解決方案只是將 yaml 文件中的響應代碼“201”更改為“200”,並且有效。 我不知道為什么我留下了響應代碼“201”。 無論如何,我對此還是個新手,不知道這是否是最佳實踐。 我願意接受任何更好的建議。

如果您未在 header 中指定請求正文中發送的數據類型,則會出現此錯誤

Content-Type : application/json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM