使用 J2V8 从 java 项目嵌入 node.js 应用程序 - 解析 node.js 中的相对路径
Embed node.js application from java project with J2V8 - resolving relative paths in node.js
运行 Node.js 应用程序 (1) 在 JVM 上使用另一个基于 Java 的应用程序 (2) 的 J2V8 时出现问题。应用程序 (1) 的启动脚本在行
上失败
fs.readFileSync('./lib/someFile.json')
因为 J2V8 提供了 '.'
应用程序 (2) 根目录的路径
但我需要 '.'
作为应用程序 (1) 根目录的路径。
仅在项目 (2) 中进行更改如何处理?
更新:添加了 Java 启动 node.js 应用程序的代码。
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();
}
您可以使用 __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'));
访问 lib
比你的 Node 程序高一级等等。另外,多亏了 path.join
你不必考虑不同操作系统上的路径分隔符(比如 /
Unix/Linux 和 \
Windows).
只对您的 Java 项目进行更改,您必须 运行 您的 Node 应用程序具有不同的工作目录。这取决于您 运行 的方式,但您应该做的是在 运行 安装 Node 应用程序之前将目录更改为您希望 '.'
指向的目录。您没有提供从您的 Java 应用程序实际 运行ning Node 应用程序的代码示例,因此很难再说什么了。
更新
看来您使用的是J2V8。 GitHub 上有一个与您尝试执行的操作相关的未解决问题:
Issue #185: Set the working directory。
您可以尝试在从 Java 启动 Node 程序之前更改工作目录 - 使用与 chdir
系统调用等效的 Java。
或者您可以将您的 Node 程序复制到您的 Java 项目中,这样它们的 '.'
目录是相同的,这样您就可以调用它:
File nodeScript = new File("./start.js");
当你可以将start.js
调用为./start.js
时,Node中的'.'
应该是start.js
文件所在的目录。
运行 Node.js 应用程序 (1) 在 JVM 上使用另一个基于 Java 的应用程序 (2) 的 J2V8 时出现问题。应用程序 (1) 的启动脚本在行
上失败fs.readFileSync('./lib/someFile.json')
因为 J2V8 提供了 '.'
应用程序 (2) 根目录的路径
但我需要 '.'
作为应用程序 (1) 根目录的路径。
仅在项目 (2) 中进行更改如何处理?
更新:添加了 Java 启动 node.js 应用程序的代码。
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();
}
您可以使用 __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'));
访问 lib
比你的 Node 程序高一级等等。另外,多亏了 path.join
你不必考虑不同操作系统上的路径分隔符(比如 /
Unix/Linux 和 \
Windows).
只对您的 Java 项目进行更改,您必须 运行 您的 Node 应用程序具有不同的工作目录。这取决于您 运行 的方式,但您应该做的是在 运行 安装 Node 应用程序之前将目录更改为您希望 '.'
指向的目录。您没有提供从您的 Java 应用程序实际 运行ning Node 应用程序的代码示例,因此很难再说什么了。
更新
看来您使用的是J2V8。 GitHub 上有一个与您尝试执行的操作相关的未解决问题: Issue #185: Set the working directory。
您可以尝试在从 Java 启动 Node 程序之前更改工作目录 - 使用与 chdir
系统调用等效的 Java。
或者您可以将您的 Node 程序复制到您的 Java 项目中,这样它们的 '.'
目录是相同的,这样您就可以调用它:
File nodeScript = new File("./start.js");
当你可以将start.js
调用为./start.js
时,Node中的'.'
应该是start.js
文件所在的目录。