Skip to content

Commit fe2fb1f

Browse files
authored
Merge pull request #972 from j-beatzz/remove-hash-from-client-request-url
Make ClientRequest chop off fragment identifiers from urls
2 parents ac95bd9 + 2388c6a commit fe2fb1f

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

packages/react-server/core/ClientRequest.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,19 @@ class ClientRequest {
1010
bundleData,
1111
reuseDom,
1212
}={}) {
13-
this._url = url;
1413
this._opts = {
1514
bundleData,
1615
reuseDom,
1716
}
17+
18+
// Chop off the fragment identifier from the url i.e everything from the # to the end of the url
19+
// if it exists to make this consistent with ExpressServerRequest.
20+
var match = url.match(/([^#]*)/);
21+
if (match === null || !match[1]) {
22+
this._url = url
23+
} else {
24+
this._url = match[1];
25+
}
1826
}
1927

2028
setRoute(route) {
@@ -38,8 +46,8 @@ class ClientRequest {
3846
}
3947

4048
getQuery() {
41-
//Grab fragment between first "?" and first "#" or end of string
42-
var match = this._url.match(/\?([^#]*)/);
49+
// Grab fragment after first "?"
50+
var match = this._url.match(/\?(.*)/);
4351

4452
if (match === null || !match[1]) {
4553
return {};

packages/react-server/core/__tests__/ClientRequestSpec.js

+22
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,26 @@ describe("ClientRequest", () => {
77
clientRequest = new ClientRequest("/");
88
});
99

10+
it("removes fragment identifiers from the url", (done) => {
11+
clientRequest = new ClientRequest("/");
12+
expect(clientRequest.getUrl()).toEqual("/");
13+
clientRequest = new ClientRequest("/react-server/foo#bar");
14+
expect(clientRequest.getUrl()).toEqual("/react-server/foo");
15+
clientRequest = new ClientRequest("/react-server/foo/#bar#bazz");
16+
expect(clientRequest.getUrl()).toEqual("/react-server/foo/");
17+
clientRequest = new ClientRequest("/react-server/foo/?#bar");
18+
expect(clientRequest.getUrl()).toEqual("/react-server/foo/?");
19+
clientRequest = new ClientRequest("/react-server/foo/?foo=bar&baz=123");
20+
expect(clientRequest.getUrl()).toEqual("/react-server/foo/?foo=bar&baz=123");
21+
clientRequest = new ClientRequest("/react-server/foo/?foo=bar&baz=123#");
22+
expect(clientRequest.getUrl()).toEqual("/react-server/foo/?foo=bar&baz=123");
23+
clientRequest = new ClientRequest("/react-server/foo/?foo=bar&baz=123&zed=abc?#some-fragment?#");
24+
expect(clientRequest.getUrl()).toEqual("/react-server/foo/?foo=bar&baz=123&zed=abc?");
25+
clientRequest = new ClientRequest("/react-server/foo#?bar=3&foo=7");
26+
expect(clientRequest.getUrl()).toEqual("/react-server/foo");
27+
done();
28+
});
29+
1030
it("parses query params correctly", (done) => {
1131
clientRequest = new ClientRequest("/");
1232
expect(clientRequest.getQuery()).toEqual({});
@@ -24,6 +44,8 @@ describe("ClientRequest", () => {
2444
expect(clientRequest.getQuery()).toEqual({foo: "bar", baz: "123"});
2545
clientRequest = new ClientRequest("/react-server/foo/?foo=bar&baz=123&zed=abc?#some-fragment?#");
2646
expect(clientRequest.getQuery()).toEqual({foo: "bar", baz: "123", zed: "abc?"});
47+
clientRequest = new ClientRequest("/react-server/foo#?bar=3&foo=7");
48+
expect(clientRequest.getQuery()).toEqual({});
2749
done();
2850
});
2951

0 commit comments

Comments
 (0)