visionmedia / page.js

Micro client-side router inspired by the Express router

Home Page:http://visionmedia.github.com/page.js

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

hash change = 404

dm-de opened this issue · comments

commented

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"
​: Object { pushState: pushState(), save: save(), … }

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

commented

I have come across the same issue.

commented

😞 🐼

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!!