【问题标题】:AspNetCore NodeServices throws NodeInvocationExceptionAspNetCore NodeServices 抛出 NodeInvocationException
【发布时间】:2018-09-08 17:23:20
【问题描述】:

我正在使用 NodeServices 在 AspNetCore 应用程序中创建 PDF。应用程序在本地机器上运行良好,但在生产环境中部署时,调用 pdf 函数时,出现以下错误:

错误:spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT 在 _errnoException (util.js:1022:11) 在 Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) 在 onErrorNT (internal/child_process.js:372:16) 在 _combinedTickCallback (内部/进程/next_tick.js:138:11) 在 process._tickCallback (internal/process/next_tick.js:180:9)

Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException:渲染报告期间出错:spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT

错误:spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT 在 _errnoException (util.js:1022:11) 在 Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) 在 onErrorNT (internal/child_process.js:372:16) 在 _combinedTickCallback (内部/进程/next_tick.js:138:11) 在 process._tickCallback (internal/process/next_tick.js:180:9)

我确认所有文件都在正确的位置。 node_modules 存在于部署中。

Azure 上的节点版本:8.9.4

生成 PDF 的代码:

module.exports = function (callback, html) {
var jsreport = require('jsreport-core')();

jsreport.init().then(function () {
    return jsreport.render({
        template: {
            content: html,
            engine: 'jsrender',
            recipe: 'phantom-pdf'
        }
    }).then(function (resp) {
        callback(/* error */ null, resp.content.toJSON().data);
    }).catch(function (e) {
        callback(/* error */ e, null);
    });
}).catch(function (e) {
    callback(/* error */ e, null);
});
};

【问题讨论】:

标签: node.js asp.net-core jsrender jsreport javascriptservices


【解决方案1】:

如果您通过免费计划使用 Azure 应用服务,则无法在服务器上呈现 pdf。这是因为该服务在沙箱中运行,因此无法运行第三方可执行文件,例如 node.exe。您需要将服务计划升级到“基本”或更高版本。

【讨论】:

  • 我采用的是现收现付计划。
【解决方案2】:

问题在于节点包的安装。我在 Azure 上使用托管 Linux 来构建解决方案。切换到托管 VS2017 构建,一切正常。 https://github.com/pofider/phantom-html-to-pdf/issues/68

【讨论】:

  • 安装 phantom.js 时存在权限问题。你可以试试“sudo npm install --unsafe-perm”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 2018-01-27
相关资源
最近更新 更多