2016-07-07 11 views
4

Kürzlich begann die Erkundung Swagger für Nodejs Express-App. Soweit ich verstanden habe, ist Swagger eine Art Framework, die Konventionen benötigt, um in Nodejs Express-App zu folgen. Swagger mappt Routen automatisch mit Controllern.Integration von Pass-Middleware in swagger nodejs erholsamen App?

Aber ich fühle, ich verliere die Fähigkeit, Middlewares wie Reisepass für die Authentifizierung zu injizieren, die leicht in benutzerdefinierten Routen hinzugefügt werden kann.

Ich weiß, es gibt Möglichkeiten, Midwardwares mit Prahlerei zu injizieren, aber irgendwie fühle ich, dass es nicht so natürlich ist, wie es ohne Swagger ist.

Gibt es eine Möglichkeit, Swagger mit minimalen Swagger-Komponenten in meinem Code zu verwenden - wahrscheinlich nur mit swagger.yaml-Datei?

Ich möchte req.swagger.param Art von Code zu vermeiden und Standard Weg zur Definition von Routen und Injektion von Middleware nutzen wollen.

Antwort

4

Swagger selbst ist eine Middleware. Wenn Sie Ihre Anwendung starten, registriert sich swagger mit app.Use ([swaggerMiddlewareObject]). So können Sie andere Middlwares vor/nach Swagger hinzufügen.

Finden Sie den kommentierten Abschnitt unten. Sie müssten es basierend auf Ihrer Authentifizierungsstrategie ändern.

'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'); 
    } 
});