2017-09-12 10 views
0

私はswaggerを使用しており、ポストAPIを使用します。パラメータは正しく表示されますが、データをサーバーに送信するためのカールコマンドは生成されません。yamlから投稿するには右のjsonを生成しません

P.S:バックエンドはnode.jsにあり、swagger-jsdocを使ってYAMLドキュメントを表現し、解析します。ここ

はYAMLです:

/** 
* @swagger 
* /register: 
* post: 
*  tags: 
*  - report 
*  description: Returns info for panel api 
*  consumes: 
*  - application/x-www-form-urlencoded 
*  produces: 
*  - application/json 
*  parameters: 
*  - name: email 
*  in: body 
*  description: Email 
*  required: true 
*  type: string 
*  - name: password 
*  in: body 
*  description: password 
*  required: true 
*  type: string 
*  - name: fullName 
*  in: body 
*  description: full name 
*  required: true 
*  type: string 
*  responses: 
*  200: 
*   description: An info for panel api 
*  401: 
*   description: If user didn't authenticate 
*/ 

、これが発生したcurlコマンドです:

curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' -d 'max mcgrey' 'http://localhost:5200/register' 

と応答:

{ 
    "status": "fail", 
    "message": "Validation failed, check your inputs.", 
    "errors": [ 
    { 
     "param": "fullName", 
     "msg": "Full name is required." 
    }, 
    { 
     "param": "fullName", 
     "msg": "Full name must be between 1 and 50 characters long." 
    }, 
    { 
     "param": "email", 
     "msg": "Email is required." 
    }, 
    { 
     "param": "email", 
     "msg": "Email is required." 
    }, 
    { 
     "param": "password", 
     "msg": "Password is required." 
    } 
    ] 
} 
+0

データはJSON形式である必要がありますか? – Subburaj

+0

しかし、消費するタイプを "consumes: - application/json"に変更すると、 "curl -X POST - ヘッダー 'Content-Type:application/json' --header 'Accept:text/html' -d 'max max "http:// localhost:5200/register '" "SyntaxError:予期しないトークン"が本体の応答につながります – Navid

答えて

1

パラメータの構文が間違っています。操作はapplication/x-www-form-urlencodedを消費することになっている場合は、in: formパラメータの代わりin: body使用する必要があります。

*  consumes: 
*  - application/x-www-form-urlencoded 
*  ... 
*  parameters: 
*  - name: email 
*  in: form    <----------- 
*  description: Email 
*  required: true 
*  type: string 
*  - name: password 
*  in: form    <----------- 
*  description: password 
*  required: true 
*  type: string 
*  - name: fullName 
*  in: form    <----------- 
*  description: full name 
*  required: true 
*  type: string 

をそれはJSONを消費することになっている場合は、単一in: bodyのパラメータを必要とし、個々のフィールド(emailpasswordなど。)は、ボディオブジェクトのプロパティである必要があります。

*  consumes: 
*  - application/json 
*  ... 
*  parameters: 
*  - name: body 
*  in: body 
*  required: true 
*  schema: 
*   type: object 
*   required: [email, password, fullName] 
*   properties: 
*   email: 
*    type: string 
*    format: email 
*    description: Email 
*   password: 
*    type: string 
*    format: password 
*    description: password 
*   fullName: 
*    type: string 
*    description: full name 
関連する問題