我正在使用该库在我的 Python 代码中运行一段 Javascript 代码js2py
。它适用于抛出的各种 Javascript 代码并处理结果。但是当在 Javascript 中使用“require”关键字时遇到错误代码。下面是我的代码
import js2py
data = '''var jsonata = require('jsonata');
var data = {
example: [
{value: 4},
{value: 7},
{value: 13}
]
};
var expression = jsonata("$sum(example.value)");
var result = expression.evaluate(data);
console.log(result);
'''
data = js2py.eval_js(data)
print(data)
这里的jsonata是一个用于解析通过 npm 安装的 JSON 的 javascript 库。
以下是我收到的错误
Traceback (most recent call last):
File "/home/souvik/PycharmProjects/ServiceHandler/Testjs.py", line 67, in <module>
data = js2py.eval_js(data)
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/evaljs.py", line 113, in eval_js
return e.eval(js)
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/evaljs.py", line 182, in eval
self.execute(code, use_compilation_plan=use_compilation_plan)
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/evaljs.py", line 177, in execute
exec(compiled, self._context)
File "<EvalJS snippet>", line 2, in <module>
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/base.py", line 899, in __call__
return self.call(self.GlobalObject, args)
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/base.py", line 1344, in call
return Js(self.code(*args))
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/host/jseval.py", line 42, in Eval
executor(py_code)
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/host/jseval.py", line 49, in executor
exec(code, globals())
File "<string>", line 2, in <module>
File "/home/souvik/utorapp/lib/python3.5/site-packages/js2py/base.py", line 1079, in get
raise MakeError('ReferenceError', '%s is not defined' % prop)
js2py.internals.simplex.JsException: ReferenceError: require is not defined
但是,当我只将 javascript 代码放在一个文件中并从命令行运行它时,它就可以工作了。
jstest.js
var jsonata = require("jsonata");
var data = {
example: [
{value: 4},
{value: 7},
{value: 13}
]
};
var expression = jsonata("$sum(example.value)");
var result = expression.evaluate(data);
console.log(result)
在命令行中
node jstest.js --> gives 25
现在我对错误进行了一些调查,结果发现'require'是浏览器要求,而不是node.js
. 事实证明,还有一个替代方法require.js
可以解决这个问题。所以我去了他们的文档,但对如何在我的 Javascript 代码中定义require没有太多意义。另外我将 jsonata 作为参数传递给require which是一个.js文件。与示例中给出的函数声明相反,我如何使用require.js
框架来处理 jsonata.js 文件?我对这个主题的理解可能有误,但我需要对此进行澄清?有有什么办法可以使这项工作?
注意:我在服务器端运行代码。