decode query params

This commit is contained in:
Rich Harris
2018-09-03 20:09:25 -04:00
parent 30966ee7f2
commit 9ef4f33e38
4 changed files with 12 additions and 11 deletions

View File

@@ -67,7 +67,7 @@ function select_route(url: URL): Target {
if (url.search.length > 0) { if (url.search.length > 0) {
url.search.slice(1).split('&').forEach(searchParam => { url.search.slice(1).split('&').forEach(searchParam => {
const [, key, value] = /([^=]+)=(.*)/.exec(searchParam); const [, key, value] = /([^=]+)=(.*)/.exec(searchParam);
query[key] = value || true; query[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : true;
}); });
} }
return { url, path, page, match, query }; return { url, path, page, match, query };

View File

@@ -1,10 +1,11 @@
<h1>{slug}</h1> <h1>{slug} ({message})</h1>
<script> <script>
export default { export default {
preload({ params }) { preload({ params, query }) {
return { return {
slug: params.slug slug: params.slug,
message: query.message
}; };
} }
}; };

View File

@@ -15,7 +15,7 @@
<a href='credentials?creds=include'>credentials</a> <a href='credentials?creds=include'>credentials</a>
<a rel=prefetch class='{page === "blog" ? "selected" : ""}' href='blog'>blog</a> <a rel=prefetch class='{page === "blog" ? "selected" : ""}' href='blog'>blog</a>
<a href="const">const</a> <a href="const">const</a>
<a href="echo/page/encöding">echo/page/encöding</a> <a href="echo/page/encöded?message=hëllö+wörld">echo/page/encöded?message=hëllö+wörld</a>
<div class='hydrate-test'></div> <div class='hydrate-test'></div>

View File

@@ -752,21 +752,21 @@ function run({ mode, basepath = '' }) {
}); });
}); });
it('encodes req.params for server-rendered pages', () => { it('encodes req.params and req.query for server-rendered pages', () => {
return nightmare.goto(`${base}/echo/page/encöded`) return nightmare.goto(`${base}/echo/page/encöded?message=hëllö+wörld`)
.page.title() .page.title()
.then(title => { .then(title => {
assert.equal(title, 'encöded'); assert.equal(title, 'encöded (hëllö wörld)');
}); });
}); });
it('encodes req.params for client-rendered pages', () => { it('encodes req.params and req.query for client-rendered pages', () => {
return nightmare.goto(base).init() return nightmare.goto(base).init()
.click('a[href="echo/page/encöding"]') .click('a[href="echo/page/encöded?message=hëllö+wörld"]')
.wait(100) .wait(100)
.page.title() .page.title()
.then(title => { .then(title => {
assert.equal(title, 'encöding'); assert.equal(title, 'encöded (hëllö wörld)');
}); });
}); });