在swagger nodejs restful app中集成护照中间件?

kir*_*ran 4 node.js express swagger passport.js

最近开始为Node.js Express应用程序探索swagger。据我了解,swagger是一种框架,需要在nodejs express应用中遵循约定。Swagger使用控制器自动映射路线。

但是我感到,我失去了注入中间件(如通行证)以进行身份​​验证的功能,可以轻松将其添加到用户定义的路由中。

我知道有一些方法可以让中间人大张旗鼓地注入,但是不知何故,我觉得它没有自然而然地变得不那么自然。

有没有办法可以在代码中使用包含最少的swagger相关组件的swagger-可能仅使用swagger.yaml文件?

我想避免使用req.swagger.param类型的代码,并希望利用标准方法来定义路由和注入中间件。

小智 5

Swagger本身是一种中间件。启动应用程序时,swagger将使用app.Use([swaggerMiddlewareObject])注册自己。因此,您可以在摇摇欲坠之前/之后添加其他中间件。

请在下面找到评论的部分。您必须根据身份验证策略进行更改。

'use strict';

var SwaggerExpress = require('swagger-express-mw');
var app = require('express')();
var passport = require('passport');

module.exports = app; // for testing

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

/*Mount your passport Middleware here using app object. As your are building a stateless restful api, I assume you would use jwt
* 1. import jwt-strategy.
* 2. Configure passport to use jwt strategy.
* 3. app.use(passport.initialize());
* 4. app.use('/pathYouWantProtect', passport.authenticate('jwt-strategy'),function(req,res,next){
*       
*    });
*/

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

  // install middleware
  swaggerExpress.register(app);

  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');
  }
});
Run Code Online (Sandbox Code Playgroud)