我正在尝试使用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是否“已损坏”!
任何人都知道我做错了什么?有什么提示吗?
答案 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中添加了我的新模块(并注释了原始模块)