From 80575a092e8e3c26e21d6703e5c343548e652356 Mon Sep 17 00:00:00 2001 From: SteveSandersonMS Date: Mon, 14 Dec 2015 13:16:39 +0000 Subject: [PATCH] Don't ignore synchronous errors when calling Node --- .../Content/Node/angular-rendering.js | 26 +++++++++++-------- .../Content/Node/entrypoint-http.js | 6 ++++- .../HostingModels/HttpNodeInstance.cs | 4 +-- .../Content/Node/react-rendering.js | 14 ++++++---- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/Microsoft.AspNet.AngularServices/Content/Node/angular-rendering.js b/Microsoft.AspNet.AngularServices/Content/Node/angular-rendering.js index 460400e..e9d5a29 100644 --- a/Microsoft.AspNet.AngularServices/Content/Node/angular-rendering.js +++ b/Microsoft.AspNet.AngularServices/Content/Node/angular-rendering.js @@ -31,17 +31,21 @@ function findAngularComponent(options) { module.exports = { renderToString: function(callback, options) { - var component = findAngularComponent(options); - var serverBindings = [ - ngRouter.ROUTER_BINDINGS, - ngUniversal.HTTP_PROVIDERS, - ng.provide(ngUniversal.BASE_URL, { useValue: options.requestUrl }), - ngUniversal.SERVER_LOCATION_PROVIDERS - ]; + try { + var component = findAngularComponent(options); + var serverBindings = [ + ngRouter.ROUTER_BINDINGS, + ngUniversal.HTTP_PROVIDERS, + ng.provide(ngUniversal.BASE_URL, { useValue: options.requestUrl }), + ngUniversal.SERVER_LOCATION_PROVIDERS + ]; - return ngUniversal.renderToString(component, serverBindings).then( - function(successValue) { callback(null, successValue); }, - function(errorValue) { callback(errorValue); } - ); + return ngUniversal.renderToString(component, serverBindings).then( + function(successValue) { callback(null, successValue); }, + function(errorValue) { callback(errorValue); } + ); + } catch (synchronousException) { + callback(synchronousException); + } } }; diff --git a/Microsoft.AspNet.NodeServices/Content/Node/entrypoint-http.js b/Microsoft.AspNet.NodeServices/Content/Node/entrypoint-http.js index 153d94f..da81202 100644 --- a/Microsoft.AspNet.NodeServices/Content/Node/entrypoint-http.js +++ b/Microsoft.AspNet.NodeServices/Content/Node/entrypoint-http.js @@ -39,7 +39,11 @@ var server = http.createServer(function(req, res) { } }; - func.apply(null, [callback].concat(bodyJson.args)); + try { + func.apply(null, [callback].concat(bodyJson.args)); + } catch (synchronousException) { + callback(synchronousException, null); + } }); }); diff --git a/Microsoft.AspNet.NodeServices/HostingModels/HttpNodeInstance.cs b/Microsoft.AspNet.NodeServices/HostingModels/HttpNodeInstance.cs index d987df3..e19d74a 100644 --- a/Microsoft.AspNet.NodeServices/HostingModels/HttpNodeInstance.cs +++ b/Microsoft.AspNet.NodeServices/HostingModels/HttpNodeInstance.cs @@ -32,8 +32,8 @@ namespace Microsoft.AspNet.NodeServices { var response = await client.PostAsync("http://localhost:" + this._portNumber, payload); var responseString = await response.Content.ReadAsStringAsync(); - if (response.StatusCode != HttpStatusCode.OK) { - throw new Exception("Node module responded with error: " + responseString); + if (!response.IsSuccessStatusCode) { + throw new Exception("Call to Node module failed with error: " + responseString); } var responseIsJson = response.Content.Headers.ContentType.MediaType == "application/json"; diff --git a/Microsoft.AspNet.ReactServices/Content/Node/react-rendering.js b/Microsoft.AspNet.ReactServices/Content/Node/react-rendering.js index 74db483..30aeb3d 100644 --- a/Microsoft.AspNet.ReactServices/Content/Node/react-rendering.js +++ b/Microsoft.AspNet.ReactServices/Content/Node/react-rendering.js @@ -45,10 +45,14 @@ function loadViaBabel(module, filename) { module.exports = { renderToString: function(callback, options) { - var component = findReactComponent(options); - var history = createMemoryHistory(options.requestUrl); - var reactElement = React.createElement(component, { history: history }); - var html = ReactDOMServer.renderToString(reactElement); - callback(null, html); + try { + var component = findReactComponent(options); + var history = createMemoryHistory(options.requestUrl); + var reactElement = React.createElement(component, { history: history }); + var html = ReactDOMServer.renderToString(reactElement); + callback(null, html); + } catch (synchronousException) { + callback(synchronousException); + } } };