我有一个关于Azure应用服务的网站,它使用节点js打印pdf文件。
该网站是建立在asp.net核心,并使用NodeServices调用幻影库,将用于将html页面转换为pdf。
我使用以下代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddNodeServices();
}并使用以下代码调用nodejs文件:
var result = await _nodeServices.InvokeAsync<bool>("./NodeJs/createPdf.js", pageUrl);我的项目解决方案也包含package.json文件,并且它需要依赖项。这个解决方案在我的本地机器上工作得很好。
在蔚蓝上,我已经将nodejs版本设置为Configuration中可用的最大版本
{
"name": "WEBSITE_NODE_DEFAULT_VERSION",
"value": "10.15.2"
},在应用程序服务上执行此操作时,我会得到以下错误:
[2019-05-14 12:15:12 ERR] Connection id "0HLMOCN6RLHIU", Request id "0HLMOCN6RLHIU:00000001": An unhandled exception was thrown by the application.
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: Cannot find module 'phantom'
Error: Cannot find module 'phantom'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (D:\home\site\wwwroot\NodeJs\createPdf.js:1:79)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Microsoft.AspNetCore.NodeServices.HostingModels.HttpNodeInstance.InvokeExportAsync[T](NodeInvocationInfo invocationInfo, CancellationToken cancellationToken)
at Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance.InvokeExportAsync[T](CancellationToken cancellationToken, String moduleName, String exportNameOrNull, Object[] args)
at Microsoft.AspNetCore.NodeServices.NodeServicesImpl.InvokeExportWithPossibleRetryAsync[T](String moduleName, String exportedFunctionName, Object[] args, Boolean allowRetry, CancellationToken cancellationToken)
at Microsoft.AspNetCore.NodeServices.NodeServicesImpl.InvokeExportWithPossibleRetryAsync[T](String moduleName, String exportedFunctionName, Object[] args, Boolean allowRetry, CancellationToken cancellationToken)
at PdfProcessor.Controllers.ProcessToPdfController.Generate(PdfRequestModel model) in d:\a\1\s\PdfProcessor\Controllers\ProcessToPdfController.cs:line 82
at PdfProcessor.Controllers.ProcessToPdfController.GeneratePdf(String pageUrl) in d:\a\1\s\PdfProcessor\Controllers\ProcessToPdfController.cs:line 52
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at System.Threading.Tasks.ValueTask`1.get_Result()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)如果npm安装没有在app服务上运行,该错误似乎是错误的。我尝试了不同的节点版本,并重新启动了应用程序服务,但仍然得到相同的错误。
我也尝试过删除package-lock.json文件并重新发布站点,但没有成功。
发布于 2019-05-15 16:55:52
问题似乎是C#运行时找不到Node依赖项phantom。从Node的角度来看,我认为依赖项很可能没有安装,因为Kudu可能不会在C#应用程序服务中安装依赖项。这将解释为什么它在您的机器上工作,而不是在云中工作。要解决这个问题,请尝试执行以下步骤:
site/wwwroot/。您应该看到您的package.json文件和一个名为node_modules的文件夹。此文件夹存储节点JS依赖项(例如:phantom)。如果找不到node_modules文件夹,就会在下一步中创建它。npm install。node_modules文件夹以前没有出现,那么现在应该可以看到它。在里面,你应该能找到很多文件夹。但是,您应该在该文件夹中看到一个phantom。这将是成功的。如果您没有您的package.json文件,它可能不会被发布,在这种情况下,您有一个不同的问题。
https://stackoverflow.com/questions/56145302
复制相似问题