首页 > 解决方案 > 从包含“require”的 C++ 插件中运行 JS 代码

问题描述

我想从 C++ node.js 插件中运行 JS 代码。

我尝试的是这样的:

// addon C++ snipplet (just added to the simple example addon code
static NAN_METHOD(RunScript) {
    MyObject* obj = ObjectWrap::Unwrap<MyObject>(info.Holder());

    v8::Local<v8::String> s = info[0]->ToString();

    v8::Local<UnboundScript> script = Nan::New<UnboundScript>(s).ToLocalChecked();
    MaybeLocal<v8::Value> result = Nan::RunScript(script);

    info.GetReturnValue().Set(result.ToLocalChecked());
}

当我从 JS 加载这个插件时,我可以运行简单的脚本:

// JS code
var OB = require('./build/Debug/objectwraphandle.node')
var obj1 = new OB.MyObject(42)
var returns = obj1.runScript("2+3");
console.log("returned: " + returns);
// ==> writes out 5, as expected

但是当我写这个时:

// JS code
var OB = require('./build/Debug/objectwraphandle.node')
var obj1 = new OB.MyObject(42)
var returns = obj1.runScript("var express = require('express');")

我得到:

FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal.
1: node::Abort() [node]
2: 0x565373d379b1 [node]
3: v8::Utils::ReportApiFailure(char const*, char const*) [node]
4: v8::MaybeLocal<v8::UnboundScript>::ToLocalChecked()
      [/home...objectwraphandle.node]
5: MyObject::RunScript(Nan::FunctionCallbackInfo<v8::Value> const&)
      [/home/.../objectwraphandle.node]
6: 0x7f493bc79dc6 [/home/.../objectwraphandle.node]
7: v8::internal::FunctionCallbackArguments::Call(void (*)
       (v8::FunctionCallbackInfo<v8::Value> const&)) [node]

我在这里做错了什么?为什么我想要运行的 JS 片段不包含“require”?调用“console.log”工作正常。(如果还有其他限制,我目前没有看到)

标签: node.jsadd-on

解决方案


推荐阅读