我有以下的thrift文件:
union D{ 1: string s; }
struct B{ 1: required D d; }
struct C{ 1: required D d; }
union A{ 1: B b; 2: C c; }
service Test { void store(1: A a) }
我有以下JSON对象,它是通过解析字符串获得的。
var data_json = {
'b': {
'd': {
's': "hello"
}
}
};
我正在尝试在Nodejs中编写一个thrift客户端,它以store
为参数调用data_json
方法,但是当我这样做时出现以下错误:
/home/aakash/Documents/thrift0/gen-nodejs/test_types.js:225
this.b.write(output);
^
TypeError: Object #<Object> has no method 'write'
at Object.A.write (/home/aakash/Documents/thrift0/gen-nodejs/test_types.js:225:12)
at Object.Test_store_args.write (/home/aakash/Documents/thrift0/gen-nodejs/Test.js:57:12)
at Object.TestClient.send_store (/home/aakash/Documents/thrift0/gen-nodejs/Test.js:113:8)
at Object.TestClient.store (/home/aakash/Documents/thrift0/gen-nodejs/Test.js:105:8)
at Object.<anonymous> (/home/aakash/Documents/thrift0/client.js:40:8)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
但是,当我将以下对象作为参数传递时,它可以正常工作:
var data_thrift = new ttypes.A({
'b': new ttypes.B({
'd': new ttypes.D({
's': "hello"
})
})
});
有没有办法将data_json
直接传递给store
,或者将data_json
转换为data_thrift
?
答案 0 :(得分:0)
我试图在Nodejs中编写一个调用商店的thrift客户端 使用data_json作为参数的方法,但是我收到以下错误 当我这样做时:
/home/aakash/Documents/thrift0/gen-nodejs/test_types.js:225
this.b.write(output);
有没有办法将
data_json
直接传递给store
,或者某种方式 将data_json
转换为data_thrift
?
不确定。只为每个Object
提供一个write()方法,实现Thrift生成的内容,或者为数据提供另一种序列化机制来生成完全相同的输出。
Thrift和Thrift库生成的代码为使用Thrift提供了必要的基础结构,并确保了Thrift RPC调用和序列化数据的互操作性。为实现此目的,序列化数据遵循某种预定义结构,该结构由您使用的协议决定。 RPC和序列化框架的所有基础结构(包括数据的生成代码)都可以提供实现此目的的方法。
如果您的应用程序在内部以其他方式保存数据(这是完全正常的),您将不得不来回转换它们。直接存储数据的唯一方法是生成Thrift基础架构为您的数据生成的精确相同的JSON输出,否则另一方将无法反序列化您的JSON。
但从技术上讲,按照这条路径,你最终会重新发明轮子。