Nodejs XMPP组件用法

时间:2014-06-06 21:04:26

标签: node.js xmpp node-xmpp

我正在尝试使用node-xmpp-component创建nodejs组件。但我一直收到错误代码400,输入修改,错误的请求,但我没有看到我的iq消息有任何问题。

我的ejabberd配置:

{5282, ejabberd_service, [ 
    { hosts, ["nodejs.myejabberddomain"], [{password, "admin"}] } 
 ]}

我的nodejs组件代码:

var Component = require('node-xmpp-component')
  , ltx = require('node-xmpp-core').ltx;


var component = new Component({
  jid       : "nodejs.myejabberddomain",
  password  : "admin",
  host      : "localhost",
  port      : "5282"
})

component.on('online', function() {
    console.log('Component is online')

    var iq = new ltx.Element('iq',{type:'set',id:'reg2', to: 'myejabberddomain'})
                .c('query',{xmlns:'jabber:iq:register'});

    component.send(iq);

})

component.on('error', function(e) {
    console.error(e)
    process.exit(1)
})

我不确定我是否缺少任何ejabberd配置,或者我的nodejs组件连接是否有任何问题,或者此nodejs-xmpp-component是否“已损坏”!

任何人都知道我做错了什么?有什么提示吗?

3 个答案:

答案 0 :(得分:0)

使用版本1.0.0-alpha1我可以使用上面的代码成功连接到韵律服务器。

您是否收到了“在线”消息?如果是这样,我的建议是你的ejabberd服务器不支持注册并向你发送错误回复?

答案 1 :(得分:0)

来自XEP-0114: Jabber Component Protocol

  

经过身份验证后,组件可以通过服务器发送节   并从服务器接收节。所有节都发送到服务器   必须拥有'from'属性和'to'属性,如   'jabber:server'命名空间。 JID的域标识符部分   包含在'from'属性中必须匹配的主机名   零件。但是,这是对“来自”地址的唯一限制,   组件可以从任何用户的主机名发送节。

答案 2 :(得分:0)

我已经从ejabberd变为韵律,但最初注册正在返回"服务不可用"。

所以我不得不继续进行韵律聊天,而Zash用户帮助我创建了一个名为mod_register_from_component的模块。

在第182到185行中,我将原来的mod_register更改为:

module:hook("iq/host/jabber:iq:register:query", function(event)
   local session, stanza = event.origin, event.stanza;

   if session.type ~= "component" then

然后在modules_enabled中的prosody.cfg.lua中添加了我的新模块(并注释了原始模块)