是什么导致此NodeJS子进程在Ubuntu上的行为与Windows有所不同?

问题描述 投票:0回答:1

我已经在Windows PC上用几个月的时间开发了一个带有NodeJS后端的MERN堆栈应用程序。在我的开发环境中,它运行良好,并且在将其部署在DigitalOcean提供的Ubuntu Droplet上时,该应用程序的大多数功能都可以正常工作。

例外情况是一项功能,它通过将值插入excel工作簿并使用第三方软件LibreOffice将其打印为pdf,从而为用户提供pdf文件。这是通过产生一个执行.exe的子进程来完成的。

这是我收到的错误消息:

Error when executing file Error: Command failed: /home/user/projectFolder/libreOffice/program/soffice.exe --headless --convert-to pdf --outdir /home/user/projectFolder/calc /home/user/projectFolder/calc/file942534.xlsx
/home/user/projectFolder/libreOffice/program/soffice.exe: 1: /home/user/projectFolder/libreOffice/program/soffice.exe: MZ������: not found
/home/user/projectFolder/libreOffice/program/soffice.exe: 2: /home/user/projectFolder/libreOffice/program/soffice.exe: Syntax error: Unterminated quoted string

    at ChildProcess.exithandler (child_process.js:303:12)
    at ChildProcess.emit (events.js:323:22)
    at maybeClose (internal/child_process.js:1021:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5) {
  killed: false,
  code: 2,
  signal: null,
  cmd: '/home/user/projectFolder/libreOffice/program/soffice.exe --headless --convert-to pdf --outdir /home/user/projectFolder/calc /home/user/projectFolder/calc/file942534.xlsx'
}

这是产生子进程的Java Script代码:

sheetToPdf = (tempName, finalCallBack) => {
  const sofficePath = path.resolve("./libreOffice/program/soffice.exe");
  const calcDirr = path.resolve("./calc/");
  const child = execFile(
    sofficePath,
    [
      "--headless",
      "--convert-to",
      "pdf",
      "--outdir",
      calcDirr,
      calcDirr + "/" + tempName
    ],
    err => {
      if (err) console.log("Error when executing file", err);
    }
  );
  child.on("close", () => sendPdf(tempName, calcDirr, finalCallBack));
};

为什么会导致此错误,为什么它会在Windows而不是Ubuntu上工作?

node.js linux ubuntu child-process libreoffice
1个回答
0
投票

之所以不起作用,是因为我试图在ubuntu上使用libre office的Windows安装,就像一个真正的傻人。

© www.soinside.com 2019 - 2024. All rights reserved.