首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ASP.NET Core NodeServices的Azure应用服务上的NodeJs不执行

使用ASP.NET Core NodeServices的Azure应用服务上的NodeJs不执行
EN

Stack Overflow用户
提问于 2019-05-15 08:57:02
回答 1查看 1.4K关注 0票数 0

我有一个关于Azure应用服务的网站,它使用节点js打印pdf文件。

该网站是建立在asp.net核心,并使用NodeServices调用幻影库,将用于将html页面转换为pdf。

我使用以下代码:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
     services.AddNodeServices();
}

并使用以下代码调用nodejs文件:

代码语言:javascript
复制
var result = await _nodeServices.InvokeAsync<bool>("./NodeJs/createPdf.js", pageUrl);

我的项目解决方案也包含package.json文件,并且它需要依赖项。这个解决方案在我的本地机器上工作得很好。

在蔚蓝上,我已经将nodejs版本设置为Configuration中可用的最大版本

代码语言:javascript
复制
  {
    "name": "WEBSITE_NODE_DEFAULT_VERSION",
    "value": "10.15.2"
  },

在应用程序服务上执行此操作时,我会得到以下错误:

代码语言:javascript
复制
[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文件并重新发布站点,但没有成功。

EN

回答 1

Stack Overflow用户

发布于 2019-05-15 16:55:52

问题似乎是C#运行时找不到Node依赖项phantom。从Node的角度来看,我认为依赖项很可能没有安装,因为Kudu可能不会在C#应用程序服务中安装依赖项。这将解释为什么它在您的机器上工作,而不是在云中工作。要解决这个问题,请尝试执行以下步骤:

  1. 启动Azure门户并导航到您的Azure>> Go。这将在浏览器的新选项卡中打开Kudu服务。
  2. 从顶部菜单栏中选择Debug Console > PowerShell
  3. 导航到site/wwwroot/。您应该看到您的package.json文件和一个名为node_modules的文件夹。此文件夹存储节点JS依赖项(例如:phantom)。如果找不到node_modules文件夹,就会在下一步中创建它。
  4. 从PowerShell提示符中运行npm install
  5. 如果node_modules文件夹以前没有出现,那么现在应该可以看到它。在里面,你应该能找到很多文件夹。但是,您应该在该文件夹中看到一个phantom。这将是成功的。
  6. 重新启动App并测试您的功能

如果您没有您的package.json文件,它可能不会被发布,在这种情况下,您有一个不同的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56145302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档