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

  • 相关阅读:
    redis-x64-3.2.100下载安装
    open with live server没反应
    JavaScript 语言的历史
    在navicat查看mysql的版本
    node.js安装教程
    个人简介
    C语言结课课程设计
    CommonJS 规范 与 ES6 规范
    大文件分片上传,断点续传,秒传
    babel编译
  • 原文地址:https://www.cnblogs.com/honghong87/p/9291278.html
Copyright © 2011-2022 走看看