node.js - 基于 Swagger YAML 验证 Express 请求

标签 node.js express yaml swagger

是否有一个 Node 模块,用于根据该请求的 Swagger YAML 架构定义来验证 Express req 对象中提供的架构/值?

假设这是 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

最佳答案

要使用 yaml 文件生成模板 Node.js 服务器,请尝试 swagger.io > Swagger 编辑器 > 在线编辑器 > 在左侧 Pane 中构建 yaml > 生成服务器 > Node.js

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

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

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

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

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

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

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

在将请求路由到您的 Controller 之前,将验证输入。

关于node.js - 基于 Swagger YAML 验证 Express 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42025088/

相关文章:

node.js - 如何将 Connect 中间件合并为一个中间件?

angularjs - Express Js/AngularJS cookie session 丢失

r - 自动记录数据集

mongodb - Mongod 无法识别 yaml 配置中的 net.http?

xml - YAML 与 XML 的比较

javascript - 如何确认是否为 ReactJS + NodeJS Express 的 MongoDB 创建了数据库?

javascript - 能够将不同的参数签名作为函数参数传递

node.js - 使用嵌套的 async.forEachSeries 和 async.waterfall 来控制 Lambda Node.js 代码的排序

node.js - 如何在 jade 模板 ahrefs 中嵌入收缩路由 url() 调用?

node.js - 类型错误 : Cannot read property 'create' of undefined error in express, postgres, sequelize