2

我正在尝试使用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 是否“损坏”!

有人知道我在做什么错吗?有小费吗?

4

3 回答 3

0

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

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

于 2014-06-09T13:12:43.987 回答
0

我已从 ejabberd 更改为 prosody,但起初注册返回“服务不可用”。

所以我不得不继续进行韵律聊天,名为 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 中添加了我的新模块(并注释了原来的模块)

于 2014-07-23T22:18:13.180 回答
0

来自XEP-0114:Jabber 组件协议

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

于 2014-06-09T16:05:50.767 回答