// addon.cc
#include <node.h>#include <iostream>
#include <v8.h>
using namespace v8;
using namespace std;
void GetArguments(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
printf("Hello GetArguments\n");
if(args.Length()==0) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate,"Wrong number of arguments")
));
return;
}
if(!args[0]->IsNumber()) {
printf("I am not Number \n");
return;
}
Local<Number> value1 = Local<Number>::Cast(args[0]);
cout<<"first argument = " << value1->NumberValue() <<endl;
Local<String> value2 = Local<String>::Cast(args[1]);
String::Utf8Value utfValue(value2);
cout<<"second argument = "<<string(*utfValue)<<endl;
Local<Object> value3 = Local<Object>::Cast(args[2]);
//Local<Array> value3 = Local<Array>::Cast(args[2]);
if(value3->IsArray()) {
length = value3->Get(String::NewFromUtf8(isolate,"length"))->ToObject()->Uint32Value();
cout<<"the input array length is :"<<length<<endl;
for(int i=0;i<length;i++)
{
Local<Value> element = value3->Get(i);
cout<<element->NumberValue()<<endl;
}
} else {
isolate -> ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate,"the third parameter should be an array")
));
return;
}
args.GetReturnValue().Set(String::NewFromUtf8(isolate,"Sexy"));
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports,"getArgs",GetArguments);
}
NODE_MODULE(addon,init)
// binding.gyp
{
"targets": [
{
"target_name": "addon",
"sources": [ "js2v8.cpp" ]
}
]
}
// test.js
const addon = require('./build/Release/addon');
var buffer1 = Buffer.from(('菜鸟教程'));
var buffer2 = Buffer.from(('www.runoob.com'));
var buffer3 = Buffer.concat([buffer1,buffer2]);
let newarr = new Array();
let json = JSON.stringify(buffer3);
let array = JSON.parse(json);
console.log(array);
for(let i=0;i<buffer3.length;i++){
newarr.push(buffer3[i]);
}
// 52
//console.log("the result is: " +JSON.stringify(addon.getArgs(12,"Hello",newarr)));