Простой маршрутизатор с переменными параметра URL - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь сделать простой маршрутизатор с параметрами URL для идентификаторов. например, localhost/profile/123 Это работает нормально, но если я удаляю preventDefault, чтобы ссылки работали как обычно, или обновлял браузер, или переходил непосредственно к тому же URL-адресу, он не работал, и браузер искал файл javascript main.jsв localhost/profile вместо источника localhost. Маршруты без параметров работает нормально. Что здесь происходит?

const router = async path => {

  if(!path) path = location.pathname

  const segment = route.split('/')

  path =  '/' + segment[1]
  const parameter = segment[2]

  const routes = {
    '/' : { handler: home },
    '/about' : { handler: about },
    '/profile' : { handler: profile },
  }

  render(html`
    <main>${await routes[path].handler(parameter ? parameter : '')}</main>
  `, document.body)
}



const main = async () => {

    await router()

    document.body.addEventListener('click', async e => {

      e.preventDefault()

      if(e.target && e.target.nodeName == "A") {
        let path = e.target.pathname

        history.pushState({urlPath: path}, '', location.origin + path)
        onpopstate = () => router()

        router(path)
      }

    })
}

main()
...