使用ejabberd获取XMPP花名册遇‘无模块处理查询’错误
问题排查:ejabberd返回"No module is handling this query"错误
1. 确认ejabberd已启用花名册模块(mod_roster)
ejabberd不会默认加载所有模块,你需要检查服务器配置文件(通常是ejabberd.yml)中的modules部分,确认是否包含mod_roster: {}。如果没有,添加这一行后重启ejabberd服务。没有这个模块,服务器自然无法处理花名册查询请求。
2. 修正请求中的from参数格式
你代码里的from值是User1@tutor,这是不完整的JID(缺少资源部分)。虽然RFC允许省略资源,但部分服务器会严格校验。可以试试两种方案:
- 去掉
from参数,让@xmpp/client自动填充当前已认证的完整JID; - 补充资源部分,比如写成
User1@tutor/ReactApp,确保和你客户端绑定的资源一致。
3. 确保请求在正确的会话阶段发送
花名册请求必须在客户端完成认证和资源绑定之后发送。如果在会话未完全建立(比如刚连接上还没登录)就调用requestRoster,服务器会拒绝处理。你应该把请求放在online事件回调里,示例:
xmppClient.on('online', () => { requestRoster(); });
4. 检查ejabberd的权限配置
确认ejabberd允许当前用户访问花名册服务。检查配置文件中的access规则,确保有类似以下的设置:
access: roster: - allow: all
如果存在限制规则,调整为允许本地用户或目标用户访问。
内容的提问来源于stack exchange,提问作者Linda
相关产品推荐
相关产品推荐

