UNPKG

1.28 kBJavaScriptView Raw
1'use strict'
2
3const path = require('path')
4const security = require('./routeSecurity')
5const routeBuilder = require('./routeBuilder')
6const assert = require('assert')
7
8exports.registerRoutes = registerRoutes
9
10function registerRoutes(app, operations, options) {
11 registerOperationRoutes(app, operations, options)
12 registerDocsRoute(app, options)
13 return app
14}
15
16function registerOperationRoutes(app, operations, options) {
17 const authorizers = security.getAuthorizers(options.api.securityDefinitions, options)
18 operations.forEach(operation => {
19 const opPath = operation.fullPath.replace(/{([^}]+)}/g, ':$1')
20 const stack = routeBuilder.buildHandlerStack(operation, authorizers, options)
21 assert.ok(stack.length > 1, `Missing operation handler for '${operation.id}'`)
22 getHttpMethod(app, operation).apply(app, [ opPath ].concat(stack))
23 })
24}
25
26function getHttpMethod(app, operation) {
27 const method = operation.method
28 let func = app[method]
29 if (func) return func
30 else if (method === 'delete') return app['del']
31 else return null
32}
33
34function registerDocsRoute(app, options) {
35 const docsPath = path.normalize(`/${options.api.basePath}/${options.docsPath}`)
36 app.get(docsPath, options.docsMiddleware, function handler(req, res) { res.json(options.api) })
37}