Node.js C++ 插件尝试使用“require”函数执行 JavaScript 代码
2018-12-14
423
我在c ++中维护一个node.js add-on。但是不幸的是(对我来说)解析器已使用一些node.js库在JavaScript中实现(函数
requiend requiend
正在使用);这是我需要执行的JavaScript代码的一个示例:
966557472
我尝试编写类似的内容:
354860861
,但不幸的是这不起作用。 网络结果是错误消息
“ ReferenceError:requient ins Indin”
:显然,我的上下文对node.js。
我尝试包装上述js函数中的表达式
parsesqlText
,但是脚本执行程序同样未知(我获取错误消息
“ referenterror:parsesqltext intecter oferate
)。
我的问题是:有什么办法可以解决这个问题吗?
任何帮助将不胜感激。我很高兴避免在C ++中重新实现该解析器...目前这似乎是唯一可行的方法。
2个回答
- 首先,v8 不是 Node.js,Node.js 是建立在 v8 之上的。
- v8 是一个 javascript 引擎
-
因此 Node.js 库本身并不随 v8 一起提供
N-API 就是问题的答案。尽管它通常用于为 Node.js 编写本机 C++ 插件。 github 线程 belwo 有一些示例。此外,N-API 的 node.js 文档也已链接。
Github Thread
Node N-API Docs
编辑:似乎这项工作已经完成了,在此 存储库 中。作者这样做是为了抽象 v8 的所有准备工作,并为您只写一行。
#include "node_embed.h"
int main(int argc, char** argv) {
node_context *context = nodeSetup(argc, argv);
if (context) {
nodeExecuteString(context, "let foo = 1", "__init__");
nodeExecuteString(context, "foo = 2", "__init__");
nodeExecuteString(context, "console.log(foo)", "__init__");
return nodeTeardown(context);
} else {
return 12;
}
}
以上内容来自存储库,可让您运行该代码片段。
Chance Shaffer
2018-12-17
我建议您去找一个已经用 C++ 编写的 SQL 解析器。我在
github.com
上搜索了十秒钟就
立即
找到了一个。
在我看来,将 JavaScript 语言引入此场景没有任何技术理由,只是为了能够“解析 SQL”。您根本不需要“从头开始编写”任何东西。它只是一个对象 - 将其“现成地”取出,实例化它的一个实例,然后使用它。
Mike Robinson
2018-12-14