【问题标题】:Validation of Express request based on Swagger YAML基于 Swagger YAML 验证 Express 请求
【发布时间】:2017-06-20 20:59:17
【问题描述】:

是否有一个节点模块用于验证 Express req 对象中提供的模式/值,基于该请求的 Swagger YAML 模式定义?

假设这是 YAML 的相关部分:

  /books/{genre}:
    get:
    parameters:
      - name: genre
        in: path
        required: true
        type: string
      - name: size
        in: query
        required: false
        type: number

从以下请求派生的 req 对象应该通过验证:

GET /books/sci-fi          
GET /books/thriller?size=5

这个应该失败:

GET /books/12

【问题讨论】:

  • 您实际上可以在谷歌上搜索“nodejs swagger”或通过类似的搜索访问 npm,并找到一个非常棒的工具来构建基于 express 的 swagger 应用程序。
  • @Paul 我当然试过了。我想将我的服务器建立在 Swagger 上,但我不知道如何自定义我的路由器、错误处理......你有与我的问题相匹配的具体库吗?
  • 是的,但这实际上与该网站无关,这就是您获得 Close 投票的原因。 Stack 是关于要求人们帮助您解决您编写的代码中的问题,而不是帮助您搜索和评估工具。
  • 您可以通过选择评价最高的 swagger 库(例如 Node-swagger)来修复它,按照教程并在此处以表格形式发布问题,“这是我尝试过的。它没有” t 做我需要的 X,我怎样才能让它做 X?”
  • 谢谢保罗。是否有网站可以帮助我评估工具?

标签: node.js express yaml swagger


【解决方案1】:

要使用 yaml 文件生成模板 node.js 服务器,请尝试 swagger.io > Swagger Editor > Online Editor > 在左侧窗格中构建您的 yaml > Generate Server > Node.js

可下载的包将使用 swagger-tools 进行验证。生成代码中的默认 index.js 将定义您的控制器(处理每个请求的自定义代码)将位于控制器目录中:

// swaggerRouter configuration
var options = {
  swaggerUi: '/swagger.json',
  controllers: './controllers',
  useStubs: process.env.NODE_ENV === 'development' ? true : false // Conditionally turn on stubs (mock mode)
};

将这些元素添加到端点定义中以定义控制器名称和方法名称:

您可以将此属性添加到您的端点定义中,以告诉 swagger-tools 中间件哪个 javascript 文件将处理请求:

x-swagger-router-controller: myController
operationId: myMethod

创建一个包含导出 myMethod 的 myController.js 的控制器目录:

module.exports.myMethod = myMethod;
function myMethod(req, res) {
  //do stuff
  res.end();
}

输入将在请求被路由到您的控制器之前进行验证。

【讨论】:

  • 关于这个的快速问题,我已经成功设置了以上所有内容^。 Swagger 目前正在为我提供服务器端验证(这很好),但是如果我要在生产中使用这个应用程序,我是否需要使用另一种形式的服务器端验证而不使用 Swagger?
  • 我使用 middleware.swaggerValidator() 来验证传入的有效负载。在产品中。我确实有一个自定义错误处理程序来拦截默认错误消息并将其转换为我想要的。详情在这里:github.com/apigee-127/swagger-tools/issues/366
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2018-08-03
  • 2011-02-03
  • 2020-05-08
  • 2019-10-09
相关资源
最近更新 更多