Я пытаюсь сделать простой маршрутизатор с параметрами 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()