【问题标题】:parsing nodejs from inside of a nodejs script从 nodejs 脚本内部解析 nodejs
【发布时间】:2018-06-04 15:15:45
【问题描述】:

是否可以解析节点 js 文件并从另一个节点 js 文件内部运行部分代码?

我有一个 node.js 文件,我试图从另一个 node.js 脚本中解析它。我不控制文件的内容,但它是有效的 node.js 并且它始终在代码中具有一个名为: 获取参数定义

这是我要解析的文件: https://github.com/jscad/OpenJSCAD.org/blob/master/examples/gear.jscad

具体来说,我希望从 getParameterDefinitions 返回的 JSON 数组作为我的代码中的变量。

这是我目前拥有的代码:

const fs = require('fs')
inputFile = 'gear.jscad'
let src = fs.readFileSync(inputFile, 'UTF8')
console.log(src)
params = Parse(src,'getParameterDefinitions') //how to write this line?

如何让节点解析 javascript 并运行函数以将结果返回到 params 变量中。

【问题讨论】:

  • 如果您认为代码安全,请使用eval
  • 即使有eval,如何调用getParameterDefinitions函数?
  • function getValues(code) { eval(code); return getParameterDefinitions(); }。然后将其称为:var params = getValues(src);仅当您确定 src 不包含任何有害代码时。
  • 不是eval(code) 而是evil(code)。 ;) 顺便说一句,不惜一切代价避免eval,尤其是在node

标签: javascript json node.js parsing


【解决方案1】:

有些人可能会建议使用eval。但是有一种更简洁的方法:Function 构造函数 - 请参阅here。然后这样做:

const getGetParameterDefinitions = new Function(src + ";\nreturn getParameterDefinitions;");
const getParameterDefinitions = getGetParameterDefinitions();
const params = getParameterDefinitions();

否则这个:

const getParameterDefinitions = new Function(src + ";\nreturn getParameterDefinitions();");
const params = getParameterDefinitions();

(注意:Function 的参数在这两种情况下略有不同。)

但这仍然是个坏主意 - 除非您信任编写代码的人,否则不要这样做。

另外,我假设函数getParameterDefinitions 是在src 脚本的最外层范围内声明的。

【讨论】:

  • 这段代码似乎不起作用,它返回:[Function: getParameterDefinitions]
  • 是的,这就是您需要调用的函数。我现在在答案的末尾添加了这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2023-03-04
  • 2013-09-07
  • 2015-06-28
  • 2013-06-04
相关资源
最近更新 更多