zoukankan      html  css  js  c++  java
  • js 实现路由功能

    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}'s 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

  • 相关阅读:
    凸优化-凸函数
    hadoop平台-Hbase安装
    非常实用的python字符串处理方法
    中心极限定理
    线性回归-误差项分析
    nginx为什么性能这么优越?
    Redis为什么单线程还那么快?线程安全吗?
    nginx负载均衡配置
    Dubbo的超时重试机制
    java类加载过程
  • 原文地址:https://www.cnblogs.com/honghong87/p/9291278.html
Copyright © 2011-2022 走看看