A year later, but still valid:
async function initialize (app) { const authenticationSpec = path.join(__dirname,'api/authentication.yaml'); const authenticationMiddleware = await useSwaggerMiddlewares(authenticationSpec, { router: routerOptions, validator: validatorOptions, }); // NOTE the metadata must be mounted at root level! app.use(authenticationMiddleware.metadata); app.use('/v2/authentication', authenticationMiddleware.validator); app.use('/v2/authentication', authenticationMiddleware.router); app.use('/v2/authentication', authenticationMiddleware.ui); const mainSpec = path.join(__dirname,'api/swagger.yaml'); const mainMiddleware = await useSwaggerMiddlewares(mainSpec, { router: routerOptions, validator: validatorOptions, }); app.use(mainMiddleware.metadata); app.use(mainMiddleware.validator); app.use(mainMiddleware.router); app.use(mainMiddleware.ui); // Start the server http.createServer(app).listen(serverPort, () => console.log('server lintening on port ${serverPort}'); } initialize(app);
Using useSwaggerMiddlewares defined here
module.exports = function useSwaggerMiddlewares (swaggerSpec, { router: routerOptions, validator: validatorOptions, }) { return new Promise((resolve, reject) => { try { // The Swagger document (require it, build it programmatically, fetch it from a URL, ...) const spec = fs.readFileSync(swaggerSpec, 'utf8'); const swaggerDoc = jsyaml.safeLoad(spec); // Initialize the Swagger middleware swaggerTools.initializeMiddleware(swaggerDoc, (middleware) => { try { return resolve({ // Interpret Swagger resources and attach metadata to request - must be first in swagger-tools middleware chain metadata: middleware.swaggerMetadata(), // Validate Swagger requests validator: middleware.swaggerValidator(validatorOptions), // Route validated requests to appropriate controller router: middleware.swaggerRouter(routerOptions), // Serve the Swagger documents and Swagger UI ui: middleware.swaggerUi() }); } catch (error) { console.error(error); return reject(error); } }); } catch (error) { console.error(error); return reject(error); } }); };
source share