【问题标题】:Programmatically running JavaScript with Node.js使用 Node.js 以编程方式运行 JavaScript
【发布时间】:2013-12-11 19:38:03
【问题描述】:

我需要以编程方式(在 Java 中)使用 Node.js 运行 JavaScript 并读取错误。有两种方法:

  1. 致电node -e <javascript>
  2. 将 JavaScript 保存到临时文件,然后调用 node temp.js

它们有何不同?

似乎第一种方法更有效,但是当我运行类似的东西时

process.on('uncaughtException', function(err) {
    console.error(typeof(err));
});
function x_5(x_6, x_7) {
  var x_8 = Infinity;
}
throw x_5;

打印出来

[eval]:8
throw x_5;
      ^
function

但我想要的只是最后一行。第二种方法只给了我最后一行。因此,我试图了解这两种方法有何不同,以及如何摆脱不必要的错误消息。

【问题讨论】:

  • 更多详情?注意我是用Java调用node命令运行JavaScript
  • 那你为什么不从一开始就提供这些细节,而不是让我们猜测呢?
  • 不幸的是,这是 node github.com/joyent/node/issues/572
  • 我的节点版本是0.11.10-pre

标签: javascript node.js error-handling


【解决方案1】:

如您所见,node -e script 会将异常转储到标准错误,因此您可以将结果打印到标准输出。

console.log 而不是 console.error

process.on('uncaughtException', function(err) {
    console.log(typeof(err));
});

在java端,从stdout获取结果,忽略stderr

String[] command = {"node", "-e", js};
Process p = Runtime.getRuntime().exec(command);
InputStream in = p.getInputStream();
for (int i = 0; i < in.available(); i++) {
    System.out.println("" + in.read());
}

【讨论】:

  • 谢谢!我编辑了您的 Java 端代码,以便可以自动转义 JS 代码中的内容。
猜你喜欢
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多