你好,那么下面的代码是node.js中的一个异步函数,这个函数必须调用一个ruby文件,生成一个pdf文件,然后将pdf文件转换为base64(删除pdf文件)并返回base64字符串!所以我的问题是,当exec调用ruby文件时,我得到下面看到的错误,我该如何解决?奇怪的是,如果我使用没有函数异步函数的代码正确!事实是我必须强行使用它
目录结构:
$check_in = $_GET['check_in'];
$check_out = $_GET['check_out'];
错误:
server.js
Router/Rapportini.js --> Call RapportiniController.js
Controller/RapportiniController.js --> Call RapportiniModel.js
Model/RapportiniModel.js -> This is file below
代码:
{ Error: Command failed: ruby report.rb prova prova2 prova3
ruby: No such file or directory -- report.rb (LoadError)
at ChildProcess.exithandler (child_process.js:275:12)
at emitTwo (events.js:126:13)
at ChildProcess.emit (events.js:214:7)
at maybeClose (internal/child_process.js:925:16)
at Socket.stream.socket.on (internal/child_process.js:346:11)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at Pipe._handle.close [as _onclose] (net.js:567:12)
killed: false,
code: 1,
signal: null,
cmd: 'ruby report.rb prova prova2 prova3' }
代码Ruby:
const fs = require('fs');
var base64 = require('file-base64');
var exec = require("child_process").exec;
async function GenerazioneRapportino()
{
exec('ruby report.rb prova prova2 prova3', function (err, stdout, stderr) {
var encode="";
if(stderr)
{
console.log("Err: ",err);
return encode;
}
else
{
console.log("File generate: ",stdout);
base64.encode('rapportino.pdf', function(err, base64String) {
fs.unlink('rapportino.pdf', (err) => {
if (err)
{
console.log("Err del file rappportino.pdf");
}
else
{
console.log('rapportino.pdf was deleted');
}
});
encode=base64String;
return encode;
});
}
});
};
答案 0 :(得分:0)
这似乎是一个红宝石错误。也许使用path
模块并获得完整路径将解决这个问题,你已经尝试过了吗?
我试过了:
const { exec } = require('child_process')
async function run() {
exec('ruby test.rb', (err, stdout, stderr) => {
console.log(err, `ruby returns ${stdout}`)
});
}
run()
所有这些异步代码都很好...它似乎真的是你的ruby文件不存在,如果你运行node server.js
,你的ruby文件必须在同一个目录中,因为你当前的dir to exec是你的基地。