javascript - 如何在 swaggerexpress 中附加中间件,如express-validator

标签 javascript node.js express swagger

我正在尝试编辑我的express-swagger项目并关注this tutorial to add input validation into an express app

我用了swagger-express-mw使用 swagger project create app 生成样板文件,但不清楚在哪里可以添加中间件,如上面提到的教程中所述。具体来说,我无法拦截我的请求,我收到一个类型错误:

    TypeError: req.checkBody is not a function
     at saveNote 

这是我的条目文件。除了 bodyParser 和验证器函数之外的所有内容都来自样板文件,所以我不明白

    SwaggerExpress.create(config, function(err, swaggerExpress) {
  if (err) { throw err }

  // install middleware
  swaggerExpress.register(app)
  // middleware
  app.use(bodyParser.urlencoded({ extended: false })); // my code
  app.use(validator()) // my d

  const port = process.env.PORT || 10010
  app.listen(port)


  // if (swaggerExpress.runner.swagger.paths['/notes']) {
  //   console.log('try this:\nlocalhost:10010/notes to get all notes')
  // }
})

最佳答案

我知道这是一个老问题,但这可能会对某人有所帮助。这是简单的 NodeJS 代码,展示了如何将 swagger-toolsswagger-express-mwswagger-node-runner npm 包集成。

<小时/>
var SwaggerExpress = require('swagger-express-mw');
var swaggerTools = require('swagger-tools');

var app = require('express')();
module.exports = app; // for testing

var config = {
    appRoot: __dirname // required config
};

SwaggerExpress.create(config, function(err, swaggerExpress) {
    if (err) {
        throw err;
    }

    // install middleware
    swaggerExpress.register(app);

    //swaggerobject is created by the swagger-express-mw module which is stored in runner object.
    var swaggerObjectLoaded = swaggerExpress.runner.swagger;

    //pass the runner object to initializeMiddleware function 
    swaggerTools.initializeMiddleware(swaggerObjectLoaded, function(middleware) {


        app.use(middleware.swaggerMetadata());

        // Validate Swagger requests
        app.use(middleware.swaggerValidator());

        // Route validated requests to appropriate controller
        app.use(middleware.swaggerRouter(options));

        // Serve the Swagger documents and Swagger UI
        app.use(middleware.swaggerUi());

        var port = process.env.PORT || 10010;
        app.listen(port);

        if (swaggerExpress.runner.swagger.paths['/hello']) {
            console.log('try this:\ncurl http://127.0.0.1:' + port + '/hello?name=Scott');
        }
    });

});

关于javascript - 如何在 swaggerexpress 中附加中间件,如express-validator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51747900/

相关文章:

javascript - 使用 jsFiddle 的全局变量

node.js - 如何保持从一个窗口到另一个窗口的套接字连接处于事件状态?

JavaScript 碰撞检测似乎不起作用?

javascript - 将参数传递给 window.addEventListener 函数

javascript - After Effects 作为后端电影引擎?

node.js - 下一个JS如何根据IP地址重定向用户?

node.js - 如何在 Express/NodeJS 中创建 Flash 消息?

javascript - 使用 Express 运行 io.js

javascript - Bootstrap 中的垂直 slider

bash - 安装 Node 时,我收到有关我的路径的提示