Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor EJSON支持构造函数_Json_Meteor_Ddp - Fatal编程技术网

Meteor EJSON支持构造函数

Meteor EJSON支持构造函数,json,meteor,ddp,Json,Meteor,Ddp,我想通过以下方法通过EJSON发送构造器: server.js Meteor.methods({ “testConstructor”(文档){ console.log(doc)/{} } }) client.js Meteor.call({type:String}) 我想通过EJSON.addType添加类型,但它目前只支持实例,不支持构造函数。我尝试将字符串构造函数封装在一个类中,如下所示: 流星启动(函数(){ 类StrWrap{ 构造函数(val){ this.val=val } to

我想通过以下方法通过
EJSON
发送构造器:

server.js

Meteor.methods({
“testConstructor”(文档){
console.log(doc)/{}
}
})
client.js

Meteor.call({type:String}) 我想通过
EJSON.addType
添加类型,但它目前只支持实例,不支持构造函数。我尝试将字符串构造函数封装在一个类中,如下所示:

流星启动(函数(){ 类StrWrap{ 构造函数(val){ this.val=val } toJSONValue(){ 返回{ 值:this.val } } 类型名(){ 返回字符串.name } } addType(字符串,函数(json){ 返回字符串 }) const str=EJSON.stringify({type:String}) console.log(str)/{} }) 还是没有机会。在一篇文章中提到,EJSON支持
String
Number
等,但我认为这是针对这些类的实例


目前,我使用本机
JSON
替换
JSON.stringify
JSON.parse
的解析器来解决这个问题,但这为每个DDP协议交互添加了一个完整的转换层,我想支持现成的构造函数,这样我就可以发送模式进行服务发现。

有趣的问题,但我认为这是不可能的。像
String
这样的构造函数是函数,所以您需要为EJSON添加函数类型。我尝试了
EJSON.addType('Function
,…`在猴子将
typeName
toJSONValue
修补到它里面之后,没有任何效果。我还尝试了
String。u proto\uu.typeName=()=>'StringFn'
加上一个
toJSONValue
修补程序,然后
EJSON.addType('StringFn',…)
这也不起作用。我对此有点惊讶,因为你可能认为EJSON只是调用了
typeName
来进行字符串化。我在源代码中发现,在将对象转换为DDP消息格式时,函数类型的值会被跳过,即使它们会被定义为自定义类型。