main.js

Swagger Sample Application

This is a sample application which uses the swagger-node-express module. The application is organized in the following manner:

petResources.js

All API methods for this petstore implementation live in this file and are added to the swagger middleware.

models.js

This contains all model definitions which are sent & received from the API methods.

petData.js

This is the sample implementation which deals with data for this application

Include express and swagger in the application.

var express = require("express")
 , url = require("url")
 , swagger = require("../../Common/node/swagger.js");

var petResources = require("./petResources.js");

var app = express();
app.use(express.bodyParser());

Set the main handler in swagger to the express app

swagger.setAppHandler(app);

This is a sample validator. It simply says that for all POST methods, the header api_key OR query param api_key must be equal to the string literal special-key. All other HTTP ops are A-OK

swagger.addValidator(
  function validate(req, path, httpMethod) {

example, only allow POST for api_key="special-key"

    if ("POST" == httpMethod) {
      var apiKey = req.headers["api_key"];
      if (!apiKey) {
        apiKey = url.parse(req.url,true).query["api_key"]; }
      if ("special-key" == apiKey) {
        return true; 
      }
      return false;
    }
    return true;
  }
);

Add models and methods to swagger

swagger.addModels(petResources.models)
  .addGet(petResources.findByTags)
  .addGet(petResources.findByStatus)
  .addGet(petResources.findById)
  .addPost(petResources.addPet)
  .addPut(petResources.updatePet)
  .addDelete(petResources.deletePet);

Configures the app's base path and api version.

swagger.configure("http://localhost:8002", "0.1");

Serve up swagger ui at /docs via static route

var docs_handler = express.static(__dirname + '/../../swagger-ui-1.1.1/');
app.get(/^\/docs(\/.*)?$/, function(req, res, next) {
  if (req.url === '/docs') { // express static barfs on root url w/o trailing slash
    res.writeHead(302, { 'Location' : req.url + '/' });
    res.end();
    return;
  }

take off leading /docs so that connect locates file correctly

  req.url = req.url.substr('/docs'.length);
  return docs_handler(req, res, next);
});

Start the server on port 8002

app.listen(8002);