Class Router {
Constructor () {
This.routes = []
}
Handle (pattern, handler) {
This.routes.push ({pattern, handler})
}
EXEC (pathname) {
For (const route of This.routes) {
if (typeof Route.pattern = = = ' String ') {
if (Route.pattern = = = Pathname) {
Return Route.handler ()
}
} else if (Route.pattern instanceof RegExp) {
Const RESULT = Pathname.match (Route.pattern)
if (result!== null) {
CONST PARAMS = result.slice (1). Map (decodeURIComponent)
Return Route.handler (.... params)
}
}
}
}
}
Const ROUTER = new Router ()
Router.handle ('/', homepage)
Router.handle (/^\/users\/([^\/]+) $/, userpage)
Router.handle (/^\//, Notfoundpage)
function homepage () {
Return ' home Page '
}
function userpage (username) {
Return ' ${username} ' page '
}
function Notfoundpage () {
Return ' not found page '
}
Console.log (Router.exec ('/'))//home page
Console.log (router.exec ('/users/john '))//John ' s page
Console.log (router.exec ('/foo '))//Not found page
JS to implement the routing function