omnip620 / node-zookeeper-dubbo

A middleware helps node to communicate dubbo by using its default protocol, which is registered in zookeeper
300 stars 80 forks source link

TypeError: Cannot read property '方法名' of undefined #104

Closed xiaojinhe2 closed 5 years ago

xiaojinhe2 commented 5 years ago

按npmjs上模块的demo测试了下,但是一直不能通过,一直提示标题显示的错误信息,后来多次查看源码发现在index.js这个文件的97行:if ( queryObj.version === depVal.version && queryObj.group === depVal.group && provider.protocol === "dubbo:" )这个判断的地方执行一直是不通过的,queryObj.version和queryObj.group都是undefined的,我这边改的demo代码入下:

var nzd = require('node-zookeeper-dubbo'); const opt = { application:{ name:'parkhelper-service' }, registry:'127.0.0.1:2182', dubboVer:'2.6.1', group:'cn.parkhelper', root:'dubbo', dependencies:{ AgentService:{ interface:'cn.parkhelper.service.park.AgentService', version:'1.0-SNAPSHOT', group:'cn.parkhelper', timeout:5000 } } };

const Dubbo = new nzd(opt); var arg1 = {$class:'java.lang.String',$:'8a04a41f59305d810159639b42ae000d'}; Dubbo.AgentService.buildUserAgentTree(arg1).then(function(data){ console.log(data); }).catch(function(err){ console.log(err); })

这里的buildUserAgentTree方法在使用telnet登陆dobbu时,使用invoke可以正常调通的,但是使用demo改过的代码死活都提示说找不到这个方法。服务已经启动了zookeeper和tomcat服务的

错误信息如下:

d:\Program Files\Sublime Text 3\project\node-api\node-dubbo\demo.js:25 Dubbo.AgentService.buildUserAgentTree(arg1).then(function(data){ ^

TypeError: Cannot read property 'buildUserAgentTree' of undefined at Object. (d:\Program Files\Sublime Text 3\project\node-api\node-dubbo\demo.js:25:20) at Module._compile (module.js:650:14) at Object.Module._extensions..js (module.js:664:10) at Module.load (module.js:566:32) at tryModuleLoad (module.js:506:12) at Function.Module._load (module.js:498:3) at Function.Module.runMain (module.js:694:10) at startup (bootstrap_node.js:204:16) at bootstrap_node.js:625:3 Waiting for the debugger to disconnect...

omnip620 commented 5 years ago
const Dubbo = new nzd(opt);
var arg1 = {$class:'java.lang.String',$:'8a04a41f59305d810159639b42ae000d'};
Dubbo.AgentService.buildUserAgentTree(arg1)
.then(function(data){
  console.log(data);
}).catch(function(err){
  console.log(err);
})

这样写是有可能的 因为 dubbo 还没初始化完毕 就调函数的话会找不到

xiaojinhe2 commented 5 years ago

不是的,已经出现了Dubbo service init done这个信息之后才报这个错误的。同样的,我用在express里面,封装到了具体的方法中,然后在页面上调用方法,也同样是报这个错,所以很奇怪了,不知道是不是version和group没写对还是怎么的,但是在java服务端dubbo配置中没有写具体的version和group的信息的,但是在运行这个代码的时候一直提示一个警告:WARNING: Please check the version、 group、 protocol(must dubbo) of dependency (AgentService),due to they are not matched with any provider service found in zookeeper.

omnip620 commented 5 years ago

那你可以尝试一下

queryObj.version === depVal.version && queryObj.group === depVal.group &&

把这部分代码注释了先

xiaojinhe2 commented 5 years ago

已经在这样测试了,注释掉了queryObj.version === depVal.version && queryObj.group === depVal.group &&这个,然后加在了express封装的方法里,在页面调用的时候之前那个错误没报错了,但是结果一直输出Error: Unknown result flag, expect '0' '1' '2', get 4 ,没看明白啥错误