Skip to content

Commit f63a68b

Browse files
Exclude swagger serving from library
1 parent d6fa533 commit f63a68b

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

example/app.js

+20-5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
// Dependencies
55
var express = require('express');
66
var bodyParser = require('body-parser');
7+
var swaggerTools = require('swagger-tools');
78
var routes = require('./routes');
8-
var swagger = require('../');
9+
var swaggerJSDoc = require('../');
910

1011

1112
// Initialize express
@@ -32,15 +33,29 @@ var swaggerDefinition = {
3233

3334
// Options for the swagger docs
3435
var options = {
35-
apiDocs: '/api-docs.json', // Default: '/api-docs', optional
36-
swaggerUi: '/docs', // Path to the swaggerUI (default: '/docs', optional)
3736
swaggerDefinition: swaggerDefinition, // Import swaggerDefinitions
3837
apis: ['./example/routes.js'], // Path to the API docs
3938
};
4039

4140

42-
// Initialize swagger-jsdoc
43-
swagger.init(app, options);
41+
// Initialize swagger-jsdoc -> returns validated swagger spec in json format
42+
var swaggerSpec = swaggerJSDoc(options);
43+
44+
45+
// Swagger Tools Options
46+
var swaggerToolsUIOptions = {
47+
apiDocs: '/api-docs.json',
48+
swaggerUi: '/docs',
49+
};
50+
51+
52+
// Initialize the Swagger middleware
53+
swaggerTools.initializeMiddleware(swaggerSpec,
54+
function(middleware) {
55+
// Serve the Swagger documents and Swagger UI
56+
app.use(middleware.swaggerUi(swaggerToolsUIOptions));
57+
}
58+
);
4459

4560

4661
// Set up the routes

lib/index.js

+16-34
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var fs = require('fs');
77
var path = require('path');
88
var doctrine = require('doctrine');
99
var jsYaml = require('js-yaml');
10-
var swaggerTools = require('swagger-tools');
10+
var parser = require('swagger-parser');
1111

1212

1313
/**
@@ -84,18 +84,14 @@ function addDataToSwaggerObject(swaggerObject, swaggerJsDocComments) {
8484
}
8585

8686

87-
// This is the Swagger object that conforms to the Swagger 2.0 specification.
88-
module.exports.swaggerObject = [];
89-
90-
9187
/**
92-
* Initializes the module. This is intended to be called only once.
88+
* Generates the swagger spec
9389
* @function
94-
* @param {object} app - Express application
9590
* @param {object} options - Configuration options
96-
* @requires swagger-tools
91+
* @returns {array} Swagger spec
92+
* @requires swagger-parser
9793
*/
98-
module.exports.init = function(app, options) {
94+
module.exports = function(options) {
9995
/* istanbul ignore if */
10096
if (!options) {
10197
throw new Error('\'options\' is required.');
@@ -106,37 +102,23 @@ module.exports.init = function(app, options) {
106102
}
107103

108104
// Build basic swagger json
109-
module.exports.swaggerObject = options.swaggerDefinition;
110-
module.exports.swaggerObject.swagger = '2.0';
111-
module.exports.swaggerObject.paths = {};
105+
var swaggerObject = [];
106+
swaggerObject = options.swaggerDefinition;
107+
swaggerObject.swagger = '2.0';
108+
swaggerObject.paths = {};
112109

113110
// Parse the documentation in the APIs array.
114111
for (var i = 0; i < options.apis.length; i = i + 1) {
115112
var jsDocComments = parseApiFile(options.apis[i]);
116113
var swaggerJsDocComments = filterJsDocComments(jsDocComments);
117-
addDataToSwaggerObject(module.exports.swaggerObject, swaggerJsDocComments);
114+
addDataToSwaggerObject(swaggerObject, swaggerJsDocComments);
118115
}
119116

120-
var swaggerToolsUIOptions = {
121-
apiDocs: options.apiDocs,
122-
swaggerUi: options.swaggerUi,
123-
};
124-
125-
// Initialize the Swagger middleware
126-
swaggerTools.initializeMiddleware(module.exports.swaggerObject,
127-
function(middleware) {
128-
// Interpret Swagger resources and attach metadata to request
129-
// must be first in swagger-tools middleware chain
130-
app.use(middleware.swaggerMetadata());
131-
132-
// Validate Swagger requests
133-
app.use(middleware.swaggerValidator());
134-
135-
// Route validated requests to appropriate controller
136-
app.use(middleware.swaggerRouter());
137-
138-
// Serve the Swagger documents and Swagger UI
139-
app.use(middleware.swaggerUi(swaggerToolsUIOptions));
117+
parser.parse(swaggerObject, function(err, api) {
118+
if (!err) {
119+
swaggerObject = api;
140120
}
141-
);
121+
});
122+
123+
return swaggerObject;
142124
};

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"dependencies": {
3030
"doctrine": "^0.6.4",
3131
"js-yaml": "^3.3.1",
32-
"swagger-tools": "^0.8.7"
32+
"swagger-parser": "^2.4.2"
3333
},
3434
"devDependencies": {
3535
"body-parser": "^1.12.4",
@@ -39,6 +39,7 @@
3939
"mocha": "^2.2.5",
4040
"mocha-jscs": "^1.1.0",
4141
"mocha-jshint": "^2.2.3",
42-
"supertest": "^1.0.1"
42+
"supertest": "^1.0.1",
43+
"swagger-tools": "^0.8.7"
4344
}
4445
}

0 commit comments

Comments
 (0)