我有一段(大)代码在C ++中作为nodejs的附加组件。当我尝试检查导出模块的对象时,部分代码使nodejs在内部抛出异常。
while($content = file_get_contents('https://www.example.com?id='.$i)) {
if($i !== 10) {
echo $i;
}else{
break;
}
$i++;
}
我正在调查一下,我发现我的命名属性(或拦截器)使这种情况发生。如果我将该组注释掉该属性的导出对象,该对象将在节点中显示我从C ++中公开的所有函数和变量。
要创建和设置命名属性我使用我为它创建的宏,但基本上这样做:
TypeError: Cannot convert a Symbol value to a string
at Object.objectToString (internal/util.js:84:36)
at isError (internal/util.js:80:18)
at formatValue (util.js:408:9)
at formatProperty (util.js:781:15)
at util.js:641:12
at Array.map (native)
at formatObject (util.js:640:15)
at formatValue (util.js:579:16)
at formatProperty (util.js:781:15)
at util.js:641:12
getter函数返回某些输入的数字,否则返回undefined。一个例子:
Local<ObjectTemplate> someFuncVar = Nan::New<ObjectTemplate>();
Nan::SetNamedPropertyHandler(someFuncVar, someFunc);
Nan::Set(target, Nan::New("someFunc").ToLocalChecked(), Nan::NewInstance(someFuncVar).ToLocalChecked());
我的问题是,是否可以修复“此问题”并避免在使用命名属性检查对象时抛出异常。
我使用节点6.3.1和Nan 2.4.0。 似乎Linux上的问题,一切都一样,有效。也许这只发生在OS X上。
要测试这种奇怪的行为,您可以下载my project,构建它(您需要在某处安装libFLAC)并尝试在节点中执行以下行:
NAN_PROPERTY_GETTER(DecWriteStatus) {
Nan::Utf8String propertyName(property);
std::string PropertyName(*propertyName);
if(PropertyName == "CONTINUE") info.GetReturnValue().Set(0);
else if(PropertyName == "ABORT") info.GetReturnValue().Set(1);
else info.GetReturnValue().SetUndefined();
}
如果它显示具有 > const f = require('bindings')('flac-bindings');
> f
功能的对象,请使用flac库的完整路径调用它,并显示错误。