page.js
page.js copied to clipboard
hash change = 404
hashbang mode is broken it do not accept valid changes and return '*' route
output context object:
canonicalPath: "/#!/user/100"
hash: ""
page: Object { current: "//user/100", len: 2, _decodeURLComponents: true, … }
params: Object { 0: "//user/100", path: "/#!/user/100", query: "" }
path: "//user/100"
pathname: "/#!/user/100"
querystring: ""
routePath: "(.*)"
state: Object { path: "/#!/user/100" }
title: "app"
As you can see - here is double slash at path - so it can never be correct after hash change - and only '*' ist valid
I was able to fix this: @ function Context(path, state, pageInstance)
if (hashbang) this.path = this.path.replace('#!', '') || '/'; change to: if (hashbang) this.path = this.path.replace('/#!', '') || '/';
But i do not know if this has other sideeffects
I have come across the same issue.
😞 🐼
Do it:
page('/', () => {
page.redirect('/page/1')
})
page('/notfound', console.log)
page('/page/:number', console.log)
page('*', ctx => {
if (/^(\/\/)/.test(ctx.path)) {
page.redirect(ctx.path.slice(1, ctx.path.length))
} else {
page.show('/notfound')
}
})
page.start({hashbang: true})
That workaround avoid the problem! If you try set the URL via external link or using navigator address bar, will work!!