feat(platform-server): use absolute URLs from Location for HTTP (#37071)
Currently, requests from the server that do not use absolute URLs fail because the server does not have the same fallback mechanism that browser XHR does. This adds that mechanism by pulling the full URL out of the document.location object, if available. PR Close #37071
This commit is contained in:

committed by
Misko Hevery

parent
ce39755937
commit
9edea0bb75
@ -793,6 +793,54 @@ describe('platform-server integration', () => {
|
||||
});
|
||||
}));
|
||||
|
||||
it('can make relative HttpClient requests', async () => {
|
||||
const platform = platformDynamicServer([
|
||||
{provide: INITIAL_CONFIG, useValue: {document: '<app></app>', url: 'http://localhost'}}
|
||||
]);
|
||||
const ref = await platform.bootstrapModule(HttpClientExampleModule);
|
||||
const mock = ref.injector.get(HttpTestingController) as HttpTestingController;
|
||||
const http = ref.injector.get(HttpClient);
|
||||
ref.injector.get(NgZone).run(() => {
|
||||
http.get<string>('/testing').subscribe((body: string) => {
|
||||
NgZone.assertInAngularZone();
|
||||
expect(body).toEqual('success!');
|
||||
});
|
||||
mock.expectOne('http://localhost/testing').flush('success!');
|
||||
});
|
||||
});
|
||||
|
||||
it('can make relative HttpClient requests two slashes', async () => {
|
||||
const platform = platformDynamicServer([
|
||||
{provide: INITIAL_CONFIG, useValue: {document: '<app></app>', url: 'http://localhost/'}}
|
||||
]);
|
||||
const ref = await platform.bootstrapModule(HttpClientExampleModule);
|
||||
const mock = ref.injector.get(HttpTestingController) as HttpTestingController;
|
||||
const http = ref.injector.get(HttpClient);
|
||||
ref.injector.get(NgZone).run(() => {
|
||||
http.get<string>('/testing').subscribe((body: string) => {
|
||||
NgZone.assertInAngularZone();
|
||||
expect(body).toEqual('success!');
|
||||
});
|
||||
mock.expectOne('http://localhost/testing').flush('success!');
|
||||
});
|
||||
});
|
||||
|
||||
it('can make relative HttpClient requests no slashes', async () => {
|
||||
const platform = platformDynamicServer([
|
||||
{provide: INITIAL_CONFIG, useValue: {document: '<app></app>', url: 'http://localhost'}}
|
||||
]);
|
||||
const ref = await platform.bootstrapModule(HttpClientExampleModule);
|
||||
const mock = ref.injector.get(HttpTestingController) as HttpTestingController;
|
||||
const http = ref.injector.get(HttpClient);
|
||||
ref.injector.get(NgZone).run(() => {
|
||||
http.get<string>('testing').subscribe((body: string) => {
|
||||
NgZone.assertInAngularZone();
|
||||
expect(body).toEqual('success!');
|
||||
});
|
||||
mock.expectOne('http://localhost/testing').flush('success!');
|
||||
});
|
||||
});
|
||||
|
||||
it('requests are macrotasks', async(() => {
|
||||
const platform = platformDynamicServer(
|
||||
[{provide: INITIAL_CONFIG, useValue: {document: '<app></app>'}}]);
|
||||
|
Reference in New Issue
Block a user