AspNetCore NodeServices 抛出 NodeInvocationException
AspNetCore NodeServices throws NodeInvocationException
我正在使用 NodeServices 在 AspNetCore 应用程序中创建 PDF。应用程序在本地机器上运行良好,但在生产环境中部署时,在调用 pdf 函数时,出现以下错误:
Error: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
at _errnoException (util.js:1022:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: Error during rendering report: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
Error: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
at _errnoException (util.js:1022:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at 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);
});
};
如果您通过免费计划使用 Azure 应用服务,则无法在服务器上呈现 pdf。这是因为服务 运行 在沙箱中,因此不能 运行 third-party 可执行文件,例如 node.exe。您需要将您的服务计划升级到 'Basic' 或更高版本。
问题出在节点包的安装上。我在 Azure 上使用 Hosted Linux 来构建解决方案。切换到托管 VS2017 构建,一切运行顺利。
https://github.com/pofider/phantom-html-to-pdf/issues/68
我正在使用 NodeServices 在 AspNetCore 应用程序中创建 PDF。应用程序在本地机器上运行良好,但在生产环境中部署时,在调用 pdf 函数时,出现以下错误:
Error: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT at _errnoException (util.js:1022:11) at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) at onErrorNT (internal/child_process.js:372:16) at _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9)
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: Error during rendering report: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT
Error: spawn D:\home\site\wwwroot\node_modules\phantomjs\lib\phantom\bin\phantomjs ENOENT at _errnoException (util.js:1022:11) at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19) at onErrorNT (internal/child_process.js:372:16) at _combinedTickCallback (internal/process/next_tick.js:138:11) at 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);
});
};
如果您通过免费计划使用 Azure 应用服务,则无法在服务器上呈现 pdf。这是因为服务 运行 在沙箱中,因此不能 运行 third-party 可执行文件,例如 node.exe。您需要将您的服务计划升级到 'Basic' 或更高版本。
问题出在节点包的安装上。我在 Azure 上使用 Hosted Linux 来构建解决方案。切换到托管 VS2017 构建,一切运行顺利。 https://github.com/pofider/phantom-html-to-pdf/issues/68