Files
yinxin630--fiora/packages/docs/i18n/en/docusaurus-plugin-content-docs/current/API.md
T
2026-07-13 12:27:50 +08:00

7.4 KiB

id, title, sidebar_label
id title sidebar_label
api API API

如何调用接口

fiora 后端基于 socket.io, 首先需要与后端建立连接

import IO from 'socket.io-client';
const socket = new IO(serverAddrress, options);

接口调用格式为

socket.emit(event, data, callback);

参数说明

  • event {string} 接口名/事件名
  • data {object} 接口入参
  • callback {string|object => void} 接口回调, 返回 string 表示接口失败, string 内容为失败原因, 反正 object 表示接口成功, 里面包含返回数据

返回数据结构定义

User

{
    _id, // {string} id
    username, // {string} 用户名
    avatar, // {string} 头像
    groups, // {[Group]} 群组列表
    friends, // {[User]} 好友列表
    token, // {string} 免密登录token
    isAdmin, // {boolean} 是否为管理员
}

Group

{
    _id, // {string} id
    name, // {string} 群组名
    avatar, // {string} 头像
    creator, // {User ID} 群主id
    isDefault, // {boolean} 是否为默认群
    members, // {[User]} 成员列表
    messages, // {[Message]} 消息列表
}

Message

{
    _id, // {string} id
    from, // {User} 发送者
    to, // {string} 群聊: 群id, 私聊: 两人id拼接, 按字符串比较, 小的在前
    type, // {string} 消息类型 ['text', 'image', 'code', 'invite']
    content, // {string} 消息内容
}

接口列表

用户注册

socket.emit(
    'register',
    {
        username, // {string} 用户名
        password, // {string} 密码
        os, // {string} 操作系统
        browser, // {string} 浏览器
        environment, // {string} 环境信息
    },
    (user) => {}, // {User} 用户数据
);

用户登录

socket.emit(
    'login',
    {
        username, // {string} 用户名
        password, // {string} 密码
        os, // {string} 操作系统
        browser, // {string} 浏览器
        environment, // {string} 环境信息
    },
    (user) => {}, // {User} 用户数据
);

免密登录 / 断线重连

socket.emit(
    'loginByToken',
    {
        token, // {string} 免密登录token
        os, // {string} 操作系统
        browser, // {string} 浏览器
        environment, // {string} 环境信息
    },
    (user) => {}, // {User} 用户数据
);

游客登录

游客仅能获取到默认群组

socket.emit(
    'guest',
    {
        os, // {string} 操作系统
        browser, // {string} 浏览器
        environment, // {string} 环境信息
    },
    (defaultGroup) => {}, // {Group} 默认群组数据
);

修改头像

socket.emit(
    'changeAvatar',
    {
        avatar, // {string} 新头像url
    },
    () => {}, // {Object} 返回空对象
);

添加好友

socket.emit(
    'addFriend',
    {
        userId, // {User ID} 目标的id
    },
    (friend) => {}, // {User} 好友信息
);

删除好友

socket.emit(
    'deleteFriend',
    {
        userId, // {User ID} 目标的id
    },
    () => {}, // {Object} 返回空对象
);

修改密码

socket.emit(
    'changePassword',
    {
        oldPassword, // {string} 旧密码
        newPassword, // {string} 新密码
    },
    () => {}, // {Object} 返回空对象
);

修改用户名

socket.emit(
    'changeUsername',
    {
        username, // {string} 新用户名
    },
    () => {}, // {Object} 返回空对象
);

重置指定用户密码

仅管理员可调用

socket.emit(
    'resetUserPassword',
    {
        username, // {string} 新用户名
    },
    (data) => { // {Object} 返回数据
        data.newPassword, // {string} 新密码
    },
);

发送消息

通过 to 字段判断是发送给群, 还是发送给个人 发送群的话, to 就是群 id 发送个人的话, to 就是两个人的 id 拼接, 按字符串比较结果, 小的在前大的在后

socket.emit(
    'sendMessage',
    {
        to, // {string} 目标群组, 或者俩用户id拼接结果
        type, // {string} 消息类型
        content, // {string} 消息内容
    },
    (message) => {}, // {Message} 新消息
);

获取联系人最后消息

socket.emit(
    'getLinkmansLastMessages',
    {
        linkmans, // {[string]} 联系人id列表, 与to同规则
    },
    (messages) => {}, // {object} 所有联系人的最后消息, key: 联系人id, value: [Message] 消息列表
);

获取联系人历史消息

socket.emit(
    'getLinkmanHistoryMessages',
    {
        linkmanId, // {string} 联系人id
        existCount, // {number} 已有消息数量
    },
    (messages) => {}, // {[Message]} 消息列表
);

获取默认群组的历史消息

不需要登录态

socket.emit(
    'getDefaultGroupHistoryMessages',
    {
        existCount, // {number} 已有消息数量
    },
    (messages) => {}, // {[Message]} 消息列表
);

创建群组

socket.emit(
    'createGroup',
    {
        name, // {string} 群组名
    },
    (group) => {}, // {Group} 新创建的群组
);

加入群组

socket.emit(
    'joinGroup',
    {
        groupId, // {Group ID} 目标群id
    },
    (group) => {}, // {Group} 新创建的群组
);

退出群组

socket.emit(
    'leaveGroup',
    {
        groupId, // {Group ID} 目标群id
    },
    () => {}, // {object} 返回空数据
);

获取群组在线用户列表

socket.emit(
    'getGroupOnlineMembers',
    {
        groupId, // {Group ID} 目标群id
    },
    (users) => {}, // {[User]} 在线用户列表
);

获取默认群组在线用户列表

socket.emit(
    'getDefaultGroupOnlineMembers',
    {},
    (users) => {}, // {[User]} 在线用户列表
);

修改群头像

socket.emit(
    'changeGroupAvatar',
    {
        groupId, // {Group ID} 目标群id
        avatar, // {string} 新头像url
    },
    () => {}, // {object} 返回空数据
);

获取七牛前端文件上传 token

socket.emit(
    'uploadToken',
    { },
    (data) => {
        // 服务端支持七牛
        data.token, // 上传token
        data.urlPrefix, // 文件上传后的路径前缀

        // 服务端不支持七牛
        data.useUploadFile, // 不支持上传七牛, 需要客户端调用 uploadFile 上传文件到服务端
    },
);

搜索用户/群组

socket.emit(
    'search',
    {
        keywords, // {string} 搜索关键字
    },
    (data) => {
        data.users, // {[User]} 命中的用户
        data.groups, // {[Group]} 命中的群组
    },
);

搜索表情包

socket.emit(
    'searchExpression',
    {
        keywords, // {string} 搜索关键字
    },
    (imageUrls) => {}, // {[string]} 图片列表
);

获取百度语言合成 token

socket.emit(
    'getBaiduToken',
    { },
    (data) => {
        data.token, // {string} token
    },
);

封禁用户

socket.emit(
    'sealUser',
    {
        username, // {string} 要封禁的用户名
    },
    () => {}, // {object} 返回空数据
);

获取封禁用户列表

socket.emit(
    'getSealList',
    {},
    (users) => {}, // {[string]} 被封禁的用户名列表
);

上传文件到服务端

socket.emit(
    'uploadFile',
    {
        fileName, // {string} 文件名
        file, // {blob} 文件内容, blob格式
    },
    (data) => {
        data.url, // 文件url
    },
);