【问题标题】:Validate requests parameters using swagger-express-middleware使用 swagger-express-middleware 验证请求参数
【发布时间】:2019-07-30 19:27:58
【问题描述】:

nodeJS swagger 中间件的新手。我有一个可能看起来像一个可能有明显答案的问题。我一直在四处寻找图书馆,而 swagger-express-middleware 似乎有一些用于处理请求验证的内置工具。

我有一个非常直接的端点:

/ping:
get:
  x-swagger-router-controller: health-check
  description: Health check endpoint.
  operationId: getPing
  responses:
    "200":
      description: This service is healthy.
      schema:
        $ref: '#/definitions/PingResponse'
    default:
      description: Error payload.
      schema:
        $ref: '#/definitions/ErrorMessage'

在服务的这个初始化函数中,我做了这样的事情

        this.middleware.init(swaggerPath, (err) => {
        this.app.use(
            this.middleware.metadata(),
            this.middleware.CORS(),
            this.middleware.files(),
            this.middleware.parseRequest(),
            this.middleware.validateRequest(),
        );
    });

如果我然后像这样运行卷曲

curl --url "http://localhost:9000/ping?hello=true"

我希望得到一个错误,但是它返回一个有效的响应。框架是否仅检查定义的参数并根据需求设置检查它们是否存在,或者它是否也能够检查上述未知参数。如果是这样,我需要在初始化阶段添加任何代码吗?还是有更好的请求验证库?

【问题讨论】:

    标签: node.js express swagger middleware


    【解决方案1】:

    我相信这是因为您在路径中包含了查询字符串,OpenAPI 标准中没有考虑到这一点:

    https://swagger.io/docs/specification/paths-and-operations/

    OpenAPI 将唯一操作视为路径和 HTTP 方法的组合,附加参数不会使操作唯一。

    这也意味着不可能有多个仅查询字符串不同的路径,例如:

    GET /users?firstName=value&lastName=value
    GET /users?role=value
    

    我的猜测是 Swagger 返回它找到的路由并忽略您的参数。

    【讨论】:

      猜你喜欢
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2018-08-03
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多