您不必將您的對象串化爲將其傳遞給C++插件。有辦法接受這些任意對象。但它並非如此肆意。你必須編寫不同的代碼來解析C++中的對象。 將其視爲數據庫的模式。您不能將單個集合/表格中的不同格式數據保存。 您將需要具有特定模式的另一個表/集合。
讓我們來看看這個例子:
我們將傳遞一個對象{X:10,Y:5}附加組件,以及C++插件將返回另一個目的與 屬性這樣的和與積:{X1 :15,Y1:50}
在CPP代碼:
NAN_METHOD(func1) {
if (info.Length() > 0) {
Local<Object> obj = info[0]->ToObject();
Local<String> x = Nan::New<String>("x").ToLocalChecked();
Local<String> y = Nan::New<String>("y").ToLocalChecked();
Local<String> sum = Nan::New<String>("sum").ToLocalChecked();
Local<String> prod = Nan::New<String>("prod").ToLocalChecked();
Local<Object> ret = Nan::New<Object>();
double x1 = Nan::Get(obj, x).ToLocalChecked()->NumberValue();
double y1 = Nan::Get(obj, y).ToLocalChecked()->NumberValue();
Nan::Set(ret, sum, Nan::New<Number>(x1 + y1));
Nan::Set(ret, prod, Nan::New<Number>(x1 * y1));
info.GetReturnValue().Set(ret);
}
}
在JavaScript的::
const addon = require('./build/Release/addon.node');
var obj = addon.func1({ 'x': 5, 'y': 10 });
console.log(obj); // { sum: 15, prod: 50 }
在這裏,你只能發送{x: (Number), y: (number)}
類型的對象只有插件。否則它將無法解析或檢索數據。
喜歡本作的數組:
在CPP:
NAN_METHOD(func2) {
Local<Array> array = Local<Array>::Cast(info[0]);
Local<String> ss_prop = Nan::New<String>("sum_of_squares").ToLocalChecked();
Local<Array> squares = New<v8::Array>(array->Length());
double ss = 0;
for (unsigned int i = 0; i < array->Length(); i++) {
if (Nan::Has(array, i).FromJust()) {
// get data from a particular index
double value = Nan::Get(array, i).ToLocalChecked()->NumberValue();
// set a particular index - note the array parameter
// is mutable
Nan::Set(array, i, Nan::New<Number>(value + 1));
Nan::Set(squares, i, Nan::New<Number>(value * value));
ss += value*value;
}
}
// set a non index property on the returned array.
Nan::Set(squares, ss_prop, Nan::New<Number>(ss));
info.GetReturnValue().Set(squares);
}
在javascript中:
const addon = require('./build/Release/addon.node');
var arr = [1, 2, 3];
console.log(addon.func2(arr)); //[ 1, 4, 9, sum_of_squares: 14 ]
這樣,你可以處理的數據類型。如果你想要複雜的對象或操作,你只需要在一個函數中混合使用這些方法並解析數據。
請問[幫助?](https://nodeaddons.com/c-processing-from-node-js-part-3-arrays/) –