rsnext/server/router.js

31 lines
650 B
JavaScript
Raw Normal View History

2016-10-06 01:52:50 +02:00
import pathMatch from 'path-match'
const route = pathMatch()
export default class Router {
constructor () {
this.routes = new Map()
}
add (method, path, fn) {
const routes = this.routes.get(method) || new Set()
routes.add({ match: route(path), fn })
this.routes.set(method, routes)
}
match (req, res, parsedUrl) {
2016-10-06 01:52:50 +02:00
const routes = this.routes.get(req.method)
if (!routes) return
const { pathname } = parsedUrl
2016-10-06 01:52:50 +02:00
for (const r of routes) {
const params = r.match(pathname)
if (params) {
return async () => {
return r.fn(req, res, params, parsedUrl)
2016-10-06 01:52:50 +02:00
}
}
}
}
}