diff --git a/src/Microsoft.AspNet.SpaServices/Content/Node/prerenderer.js b/src/Microsoft.AspNet.SpaServices/Content/Node/prerenderer.js index 0c59b86..04321c1 100644 --- a/src/Microsoft.AspNet.SpaServices/Content/Node/prerenderer.js +++ b/src/Microsoft.AspNet.SpaServices/Content/Node/prerenderer.js @@ -69,19 +69,19 @@ var domain = require('domain'); var domainTask = require('domain-task'); var baseUrl = require('domain-task/fetch').baseUrl; -function findBootModule(bootModule, callback) { - var bootModuleNameFullPath = path.resolve(process.cwd(), bootModule.moduleName); +function findBootModule(applicationBasePath, bootModule, callback) { + var bootModuleNameFullPath = path.resolve(applicationBasePath, bootModule.moduleName); if (bootModule.webpackConfig) { - var webpackConfigFullPath = path.resolve(process.cwd(), bootModule.webpackConfig); + var webpackConfigFullPath = path.resolve(applicationBasePath, bootModule.webpackConfig); loadViaWebpack(webpackConfigFullPath, bootModuleNameFullPath, callback); } else { callback(null, require(bootModuleNameFullPath)); } } -function findBootFunc(bootModule, callback) { +function findBootFunc(applicationBasePath, bootModule, callback) { // First try to load the module (possibly via Webpack) - findBootModule(bootModule, function(findBootModuleError, foundBootModule) { + findBootModule(applicationBasePath, bootModule, function(findBootModuleError, foundBootModule) { if (findBootModuleError) { callback(findBootModuleError); return; @@ -113,8 +113,8 @@ function findBootFunc(bootModule, callback) { }); } -function renderToString(callback, bootModule, absoluteRequestUrl, requestPathAndQuery) { - findBootFunc(bootModule, function (findBootFuncError, bootFunc) { +function renderToString(callback, applicationBasePath, bootModule, absoluteRequestUrl, requestPathAndQuery) { + findBootFunc(applicationBasePath, bootModule, function (findBootFuncError, bootFunc) { if (findBootFuncError) { callback(findBootFuncError); return; diff --git a/src/Microsoft.AspNet.SpaServices/Prerendering/PrerenderTagHelper.cs b/src/Microsoft.AspNet.SpaServices/Prerendering/PrerenderTagHelper.cs index 1e033c2..ca810a5 100644 --- a/src/Microsoft.AspNet.SpaServices/Prerendering/PrerenderTagHelper.cs +++ b/src/Microsoft.AspNet.SpaServices/Prerendering/PrerenderTagHelper.cs @@ -28,21 +28,23 @@ namespace Microsoft.AspNet.SpaServices.Prerendering [HtmlAttributeName(PrerenderWebpackConfigAttributeName)] public string WebpackConfigPath { get; set; } + private string applicationBasePath; private IHttpContextAccessor contextAccessor; private INodeServices nodeServices; public PrerenderTagHelper(IServiceProvider serviceProvider, IHttpContextAccessor contextAccessor) { + var appEnv = (IApplicationEnvironment)serviceProvider.GetService(typeof(IApplicationEnvironment)); this.contextAccessor = contextAccessor; this.nodeServices = (INodeServices)serviceProvider.GetService(typeof (INodeServices)) ?? fallbackNodeServices; + this.applicationBasePath = appEnv.ApplicationBasePath; // Consider removing the following. Having it means you can get away with not putting app.AddNodeServices() // in your startup file, but then again it might be confusing that you don't need to. if (this.nodeServices == null) { - var appEnv = (IApplicationEnvironment)serviceProvider.GetService(typeof(IApplicationEnvironment)); this.nodeServices = fallbackNodeServices = Configuration.CreateNodeServices(new NodeServicesOptions { HostingModel = NodeHostingModel.Http, - ProjectPath = appEnv.ApplicationBasePath + ProjectPath = this.applicationBasePath }); } } @@ -51,6 +53,7 @@ namespace Microsoft.AspNet.SpaServices.Prerendering { var request = this.contextAccessor.HttpContext.Request; var result = await Prerenderer.RenderToString( + applicationBasePath: this.applicationBasePath, nodeServices: this.nodeServices, bootModule: new JavaScriptModuleExport(this.ModuleName) { exportName = this.ExportName, diff --git a/src/Microsoft.AspNet.SpaServices/Prerendering/Prerenderer.cs b/src/Microsoft.AspNet.SpaServices/Prerendering/Prerenderer.cs index b9b9d6d..0e2f974 100644 --- a/src/Microsoft.AspNet.SpaServices/Prerendering/Prerenderer.cs +++ b/src/Microsoft.AspNet.SpaServices/Prerendering/Prerenderer.cs @@ -16,8 +16,9 @@ namespace Microsoft.AspNet.SpaServices.Prerendering }); } - public static async Task RenderToString(INodeServices nodeServices, JavaScriptModuleExport bootModule, string requestAbsoluteUrl, string requestPathAndQuery) { + public static async Task RenderToString(string applicationBasePath, INodeServices nodeServices, JavaScriptModuleExport bootModule, string requestAbsoluteUrl, string requestPathAndQuery) { return await nodeServices.InvokeExport(nodeScript.Value.FileName, "renderToString", + applicationBasePath, bootModule, requestAbsoluteUrl, requestPathAndQuery);