index.js (51 lines of code) (raw):

const Promise = require('bluebird'); const express = require('express'); const cors = require('cors'); const middleware = Promise.promisify(require('swagger-express-middleware')); const FileDataStore = require('swagger-express-middleware/lib/data-store/file-data-store'); const Resource = require('swagger-express-middleware/lib/data-store/resource'); const spectacle = require('spectacle-docs'); const initialData = require('./initial-data.json'); const routesFilePath = './routes.yml'; const app = express(); app.use(cors()); const myDB = new FileDataStore('./data/'); myDB.save(Resource.parse(initialData)); console.log('Starting app...'); Promise.all([ middleware(routesFilePath, app), spectacle({ silent: true, specFile: routesFilePath, targetFile: 'index.html', targetDir: 'dist' }) ]) .then(([ middleware ]) => { app.use(express.static('dist')); app.get('/routes.yml', (req, res) => { res.sendFile(routesFilePath, { root: './' }); }); app.use( middleware.metadata(), middleware.CORS(), middleware.files(), middleware.parseRequest(), middleware.validateRequest(), middleware.mock(myDB) ); }) .catch((err) => { console.log('Error', err, err.stack); app.get('*', (req, res) => { res.status(500).send({ error: err.message, stack: err.stack }); }); }) .then(() => { app.listen(8000, function() { console.log('API Lab is now running at http://localhost:8000'); }); })