# 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);