基于Swagger YAML验证Express请求

时间:2017-02-03 13:08:16

标签: node.js express yaml swagger

是否有一个节点模块用于验证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

1 个答案:

答案 0 :(得分:1)

要使用yaml文件生成模板node.js服务器,请尝试使用swagger.io> Swagger编辑器>在线编辑器>在左侧窗格中构建您的yaml>生成服务器> 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();
}

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