微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Node Addons 中添加两个字符串参数

如何解决在 Node Addons 中添加两个字符串参数

我试图在我的插件添加两个字符串参数,但我无法让它工作。我总是收到关于两个参数类型的错误

我的功能

void Add(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  Local<Context> context = isolate->GetCurrentContext();

  // Check the number of arguments passed.
  if (args.Length() < 2) {
    isolate->ThrowException(Exception::TypeError(
        String::NewFromUtf8(isolate,"Wrong number of arguments")
            .ToLocalChecked()));
    return;
  }

  // Check the argument types
  if (!args[0]->Isstring() || !args[1]->Isstring()) {
    isolate->ThrowException(Exception::TypeError(
        String::NewFromUtf8(isolate,"Wrong arguments").ToLocalChecked()));
    return;
  }

  Local<String> arg1 = args[0]->ToString(context).ToLocalChecked();
  Local<String> arg2 = args[1]->ToString(context).ToLocalChecked();

  args.GetReturnValue().Set(arg1 + arg2);
}

整个文件

#include <node.h>
#include <string>

namespace demo {

using v8::Context;
using v8::Exception;
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Number;
using v8::Object;
using v8::String;
using v8::Value;

void Add(const FunctionCallbackInfo<Value> &args) {...

void Init(Local<Object> exports) { NODE_SET_METHOD(exports,"add",Add); }

NODE_MODULE(NODE_GYP_MODULE_NAME,Init);

}

任何反馈将不胜感激。

解决方法

找到了解决方案。唯一的问题是我应该将 Local<String> 类型转换为 std::string。并将它们加在一起后,返回值时将它们转换回 Local<String>

代码:

void Add(const FunctionCallbackInfo<Value> &args) {
  Isolate *isolate = args.GetIsolate();
  Local<Context> context = isolate->GetCurrentContext();

  // Check the number of arguments passed.
  if (args.Length() < 2) {
    isolate->ThrowException(Exception::TypeError(
        String::NewFromUtf8(isolate,"Wrong number of arguments")
            .ToLocalChecked()));
    return;
  }

  // Check the argument types
  if (!args[0]->IsString() || !args[1]->IsString()) {
    isolate->ThrowException(Exception::TypeError(
        String::NewFromUtf8(isolate,"Wrong arguments").ToLocalChecked()));
    return;
  }

  v8::String::Utf8Value str1(isolate,args[0]);
  v8::String::Utf8Value str2(isolate,args[1]);
  std::string searchWord(*str1);
  std::string body(*str2);

  std::string res = searchWord + body;

  args.GetReturnValue().Set(
      String::NewFromUtf8(isolate,res.c_str()).ToLocalChecked());
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。