【问题标题】:Embed node.js application from java project with J2V8 - resolving relative paths in node.js使用 J2V8 从 java 项目中嵌入 node.js 应用程序 - 解析 node.js 中的相对路径
【发布时间】:2016-08-29 15:24:44
【问题描述】:

使用来自另一个基于 Java 的应用程序 (2) 的 J2V8 在 JVM 上运行 Node.js 应用程序 (1) 时遇到问题。应用程序(1)的启动脚本上线失败

fs.readFileSync('./lib/someFile.json') 

因为J2V8提供了'.'应用程序的路径(2)根目录 但我需要 '.' 作为应用程序 (1) 根目录的路径。

我如何处理它只在项目(2)中进行更改?

更新:添加了启动 node.js 应用程序的 Java 代码。

public static void main(String[] args) {
        final NodeJS nodeJS = NodeJS.createNodeJS();
        File nodeScript = new File("/media/Projects/Test/start.js");
        nodeJS.exec(nodeScript);
        while(nodeJS.isRunning()) {
            nodeJS.handleMessage();
        }
        nodeJS.release();
}

【问题讨论】:

  • 你的英语很好。

标签: java node.js j2v8


【解决方案1】:

您可以使用__dirname 获取您的 Node 脚本所在目录的路径。

例如:

fs.readFileSync(__dirname + '/lib/someFile.json');

可能会做你需要的。

或者使用path.join:

var path = require('path');
fs.readFileSync(path.join(__dirname, 'lib', 'someFile.json');

使用path.join,您可以执行以下操作:

console.log(path.join(__dirname, '..', 'lib', 'someFile.json'));

访问比您的 Node 程序高一级的lib 等等。此外,感谢path.join,您不必考虑不同操作系统上的路径分隔符(例如 Unix/Linux 上的 /\ 在 Windows 上)。

仅对您的 Java 项目进行更改,您将不得不使用不同的工作目录运行您的 Node 应用程序。这取决于您如何运行它,但您应该做的是在运行 Node 应用程序之前将目录更改为您希望 '.' 指向的目录。您没有提供从 Java 应用程序实际运行 Node 应用程序的代码示例,因此很难说更多。

更新

看来您使用的是 J2V8。 GitHub 上有一个与您尝试执行的操作相关的未解决问题: Issue #185: Set the working directory

在从 Java 启动 Node 程序之前,您可以尝试更改工作目录 - 使用 Java 等效的 chdir 系统调用。

或者,您可以将您的 Node 程序复制到您的 Java 项目中,以便它们的 '.' 目录相同,以便您可以使用以下命令调用它:

File nodeScript = new File("./start.js");

当您可以将start.js 称为./start.js 时,Node 中的'.' 应该是start.js 文件所在的目录。

【讨论】:

  • 感谢您的快速回复,它非常适合 node.js 方面。添加了启动 node.js 应用程序的 Java 代码,如果您对如何从 Java 端解决此问题有一些想法,请现在告诉我。
  • @DmitryAleshkevich 所以看来您正在使用 J2V8 - 请参阅我的更新答案。
  • 感谢您的回答,真的很有帮助。
猜你喜欢
  • 2015-03-02
  • 2016-04-11
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2020-12-07
相关资源
最近更新 更多