From 7f61234801b1ba4bce3f4def0c0883f8ac6a9354 Mon Sep 17 00:00:00 2001 From: Aleksandar Puskas Date: Thu, 12 Nov 2020 19:03:50 +0100 Subject: [PATCH 1/2] Make sure Angular CLI middleware supports "ng serve --ssl" by listening to full URL returned by Angular CLI. --- .../src/AngularCli/AngularCliMiddleware.cs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs b/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs index 013681d5775f..1c12dd8b9386 100644 --- a/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs +++ b/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs @@ -48,27 +48,19 @@ public static void Attach( var diagnosticSource = appBuilder.ApplicationServices.GetRequiredService(); var angularCliServerInfoTask = StartAngularCliServerAsync(sourcePath, scriptName, pkgManagerCommand, devServerPort, logger, diagnosticSource, applicationStoppingToken); - // Everything we proxy is hardcoded to target http://localhost because: - // - the requests are always from the local machine (we're not accepting remote - // requests that go directly to the Angular CLI middleware server) - // - given that, there's no reason to use https, and we couldn't even if we - // wanted to, because in general the Angular CLI server has no certificate - var targetUriTask = angularCliServerInfoTask.ContinueWith( - task => new UriBuilder("http", "localhost", task.Result.Port).Uri); - SpaProxyingExtensions.UseProxyToSpaDevelopmentServer(spaBuilder, () => { // On each request, we create a separate startup task with its own timeout. That way, even if // the first request times out, subsequent requests could still work. var timeout = spaBuilder.Options.StartupTimeout; - return targetUriTask.WithTimeout(timeout, + return angularCliServerInfoTask.WithTimeout(timeout, $"The Angular CLI process did not start listening for requests " + $"within the timeout period of {timeout.TotalSeconds} seconds. " + $"Check the log output for error information."); }); } - private static async Task StartAngularCliServerAsync( + private static async Task StartAngularCliServerAsync( string sourcePath, string scriptName, string pkgManagerCommand, int portNumber, ILogger logger, DiagnosticSource diagnosticSource, CancellationToken applicationStoppingToken) { if (portNumber == default(int)) @@ -99,13 +91,12 @@ private static async Task StartAngularCliServerAsync( } var uri = new Uri(openBrowserLine.Groups[1].Value); - var serverInfo = new AngularCliServerInfo { Port = uri.Port }; // Even after the Angular CLI claims to be listening for requests, there's a short // period where it will give an error if you make a request too quickly await WaitForAngularCliServerToAcceptRequests(uri); - return serverInfo; + return uri; } private static async Task WaitForAngularCliServerToAcceptRequests(Uri cliServerUri) From 1d37daf63b6f86afaf36c6b2d21c4466d3957e60 Mon Sep 17 00:00:00 2001 From: Aleksandar Puskas Date: Fri, 13 Nov 2020 09:14:23 +0100 Subject: [PATCH 2/2] Removed redundant AngularCliServerInfo class. --- .../src/AngularCli/AngularCliMiddleware.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs b/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs index 1c12dd8b9386..ed02985250c5 100644 --- a/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs +++ b/src/Middleware/SpaServices.Extensions/src/AngularCli/AngularCliMiddleware.cs @@ -137,10 +137,5 @@ await client.SendAsync( } } } - - class AngularCliServerInfo - { - public int Port { get; set; } - } } }