1.3.1 • Published 9 years ago

swagger-express-storage-middleware v1.3.1

Weekly downloads
2
License
MIT
Repository
github
Last release
9 years ago

Swagger Express Storage Middleware

Storage engine middleware for use with Swagger Express Middleware.

Currently supports the following storage adapters:

Installation

npm install swagger-express-storage-middleware --save

Example Usage

var path = require('path')
var express =  require('express')
var swagger = require('swagger-express-middleware')
// Load the desired storage adapter layer.
var Storage = require('swagger-express-storage-middleware/lib/adapters/waterline')

// Initialize Express application.
var app = express()
// Get the full path to the Swagger specification.
var spec = path.join(__dirname, 'api/spec.yaml')
// Load the storage engine adapter configuration.
var storage = new Storage(require('./storage/disk-adapter'))

// Parse the Swagger specification and initialize Swagger Express middleware.
swagger(spec, app, function (err, middleware, apiObject, apiMetadata) {
  if (err) {
    console.error(err)
  }

  // Initialize storage engine using model schema definitions.
  storage.initialize(apiObject.definitions, function (err) {
    if (err) {
      console.error(err)
    }

    // Load Swagger Express middleware.
    app.use(middleware.metadata())
    app.use(middleware.files())
    app.use(middleware.CORS())
    app.use(middleware.parseRequest())
    app.use(middleware.validateRequest())

    // Add custom middleware to the chain.
    app.use(function(req, res, next) {
      return next()
    })

    // Load storage middleware.
    app.use(storage.middleware())

    // Respond the the request if data was found in the storage engine.
    // The storage middleware sets the `res.swagger.data` property if a
    // resource is found. However, it needs to be returned to the client.
    // The storage middleware does not return the result so that additional
    // processing can be done, if desired.
    app.use(function(req, res, next) {
      if (res.swagger && res.swagger.data) {
        res.setHeader('X-Powered-By', 'Swagger Express')
        return res.json(res.swagger.data)
      } else if (res.statusCode === 204) {
        return res.end()
      }
      return next()
    })

    // Add 404 handler for non-Swagger routes.
    app.use(function finalHandler (req, res, next) {
      return res.status(404).json({
        code: 404,
        message: '404 Error: Resource not found'
      })
    })

    // Add final Express error handler.
    app.use(function errorHandler (err, req, res, next) {
      return res.status(err.status).json({
        code: err.status,
        message: err.message
      })
    })

    // Start the server.
    var server = app.listen(process.env.PORT || 3000, function(err) {
      console.log('%s is now running on port %d', apiObject.info.title, server.address().port)
    })
  })
})
// storage/disk-adapter.js
var path = require('path')

module.exports = {
  adapters: {
    default: require('sails-disk')
  },
  connections: {
    default: {
      adapter: 'default',
      filePath: path.join(__dirname, 'tmp/')
    }
  },
  defaults: {
    migrate: 'safe'
  }
}