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

pull/282/head
amio 2019-05-13 10:51:32 +08:00
rodzic 2ccc8ac854
commit 9294f091c4
3 zmienionych plików z 28 dodań i 16 usunięć

Wyświetl plik

@ -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 })

Wyświetl plik

@ -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)
}
let matchedArgs
matchers.find(m => (matchedArgs = m.test(pathname)))
if (matchedArgs) {
const params = await handler(matchedArgs)
return serveBadge(req, res, { params, query })
// serve help message
if (pathname.startsWith('/help')) {
return serveHelp(req, res, help, examples)
}
return serve404(req, res)
// Lookup handler
let matchedArgs
const matchedScheme = Object.keys(handlers).find(scheme => {
matchedArgs = new PathParser(scheme).test(pathname)
return matchedArgs !== null
})
if (matchedScheme) {
const params = await handlers[matchedScheme](matchedArgs)
return serveBadge(req, res, { params, query })
} else {
return serve404(req, res)
}
}
}

Wyświetl plik

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