Swagger-node - Ошибка захвата мультиплексора «Неожиданное поле»

avatar
Joseph Sabido
8 апреля 2018 в 02:32
333
0
1

Я использую swagger-node v0.7.5 для небольшого проекта, который включает загрузку файла.

Загружаемый файл был объявлен в файле YAML, и он работает должным образом, но я не смог решить следующую проблему.

Если клиент отправляет дополнительное поле файла ("неожиданное поле"), которое не было объявлено в YAML, я получаю следующую ошибку как в консоли, так и в виде ошибки 500:

Error: Unexpected field
application.js:630
    at makeError (c:\node_projects\open-protocol-loader-v2\node_modules\multer\lib\make-error.js:12:13)
    at wrappedFileFilter (c:\node_projects\open-protocol-loader-v2\node_modules\multer\index.js:40:19)
    at Busboy.<anonymous> (c:\node_projects\open-protocol-loader-v2\node_modules\multer\lib\make-middleware.js:114:7)
    at emitMany (events.js:146:13)
    at Busboy.emit (events.js:223:7)
    at Busboy.emit (c:\node_projects\open-protocol-loader-v2\node_modules\busboy\lib\main.js:38:33)
    at PartStream.<anonymous> (c:\node_projects\open-protocol-loader-v2\node_modules\busboy\lib\types\multipart.js:213:13)
    at emitOne (events.js:115:13)
    at PartStream.emit (events.js:210:7)
    at HeaderParser.<anonymous> (c:\node_projects\open-protocol-loader-v2\node_modules\dicer\lib\Dicer.js:51:16)
    at emitOne (events.js:115:13)
    at HeaderParser.emit (events.js:210:7)
    at HeaderParser._finish (c:\node_projects\open-protocol-loader-v2\node_modules\dicer\lib\HeaderParser.js:68:8)
    at SBMH.<anonymous> (c:\node_projects\open-protocol-loader-v2\node_modules\dicer\lib\HeaderParser.js:40:12)
    at emitMany (events.js:146:13)
    at SBMH.emit (events.js:223:7)
    at SBMH._sbmh_feed (c:\node_projects\open-protocol-loader-v2\node_modules\streamsearch\lib\sbmh.js:159:14)
    at SBMH.push (c:\node_projects\open-protocol-loader-v2\node_modules\streamsearch\lib\sbmh.js:56:14)
    at HeaderParser.push (c:\node_projects\open-protocol-loader-v2\node_modules\dicer\lib\HeaderParser.js:46:19)
    at Dicer._oninfo (c:\node_projects\open-protocol-loader-v2\node_modules\dicer\lib\Dicer.js:197:25)
    at SBMH.<anonymous> (c:\node_projects\open-protocol-loader-v2\node_modules\dicer\lib\Dicer.js:127:10)
    at emitMany (events.js:146:13)

Я хочу иметь возможность игнорировать любые поля/файлы, отправленные клиентом, которые не объявлены в Swagger YAML.

swagger.yaml

swagger: "2.0"
info:
  version: "0.0.1"
  title: XSD Parser
# during dev, should point to your local machine
host: localhost:10010
# basePath prefixes all resource paths 
basePath: /
# 
schemes:
  # tip: remove http to make production-grade
  - http
  - https
# format of bodies a client can send (Content-Type)
consumes:
  - application/json
# format of the responses to the client (Accepts)
produces:
  - application/json
paths:
  /import_xsd:
    x-swagger-router-controller: import_xsd
    post:
      description: Returns success or failure of the XSD import.
      operationId : parse_xsd
      consumes:
        - multipart/form-data
      parameters:
        - name: xsd_file
          in: formData
          type: file
          description: The file to upload
          required: true
      responses:
        "200":
          description: Success
          schema:
            $ref : "#/definitions/ImportXsdResponse"

        "400":
          description: Bad Request. Something sent by the client wasn't right.
          schema:
            $ref: "#/definitions/ErrorResponse"

        "500":
          description: Server Error. The server had an ouchie.
          schema:
            $ref: "#/definitions/ErrorResponse"

        default:
          description: Something went wrong.
          schema:
            $ref: "#/definitions/ErrorResponse"
  /swagger:
    x-swagger-pipe: swagger_raw
# complex objects have schema definitions
definitions:
  ImportXsdResponse:
    required:
      - message
    properties:
      message:
        type: string
  ErrorResponse:
    required:
      - message
    properties:
      message:
        type: string

Контроллер: import_xsd.js

'use strict'

var fs = require('fs')
var uuid = require('uuid').v4

module.exports = {
    parse_xsd : function(request, response){

        fs.writeFile(`./uploads/${uuid()}`, request.swagger.params.xsd_file.value.buffer, function(error){
            if(error){
                debug(error)
            }
        })

        response.json({
            "message" : "File was uploaded successfully."
        })
    }
}
Источник

Ответы (0)