Browse Source

Merge `schemes` and `handler` to `handlers`

docker-size
amio 6 years ago
parent
commit
9294f091c4
  1. 12
      endpoints/badge.js
  2. 25
      libs/badgen-serve.js
  3. 3
      libs/serve-help.js

12
endpoints/badge.js

@ -10,11 +10,6 @@ const examples = [
'/badge/platform/ios,macos,tvos?list=1'
]
const schemes = [
'/badge/:label/:status',
'/badge/:label/:status/:color'
]
const handler = async (args) => {
const { label, status, color } = args
return {
@ -24,4 +19,9 @@ const handler = async (args) => {
}
}
module.exports = badgenServe(schemes, handler, { help, examples })
const handlers = {
'/badge/:label/:status': handler,
'/badge/:label/:status/:color': handler
}
module.exports = badgenServe(handlers, { examples })

25
libs/badgen-serve.js

@ -2,26 +2,35 @@ const url = require('url')
const PathParser = require('path-parser').default
const serve404 = require('./serve-404.js')
const serveHelp = require('./serve-help.js')
const serveBadge = require('./serve-badge.js')
module.exports = function createHandler (schemes, handler, { help = '', examples = [] }) {
const matchers = schemes.map(scheme => new PathParser(scheme))
module.exports = function createHandler (handlers, { help = '', examples = [] }) {
return async function httpHandler (req, res) {
const { pathname, query } = url.parse(req.url, true)
// serve favicon
if (pathname === '/favicon.ico') {
return serve404(req, res)
}
// serve help message
if (pathname.startsWith('/help')) {
return serveHelp(req, res, help, examples)
}
// Lookup handler
let matchedArgs
matchers.find(m => (matchedArgs = m.test(pathname)))
const matchedScheme = Object.keys(handlers).find(scheme => {
matchedArgs = new PathParser(scheme).test(pathname)
return matchedArgs !== null
})
if (matchedArgs) {
const params = await handler(matchedArgs)
if (matchedScheme) {
const params = await handlers[matchedScheme](matchedArgs)
return serveBadge(req, res, { params, query })
} else {
return serve404(req, res)
}
return serve404(req, res)
}
}

3
libs/serve-help.js

@ -0,0 +1,3 @@
module.exports = async function (req, res, help, examples) {
res.end(help)
}
Loading…
Cancel
Save