/app/model/group_user.js
// app/model/group_user.js 'use strict'; const crypto = require('crypto'); module.exports = app => { const { STRING, INTEGER, DATE, ENUM, TEXT } = app.Sequelize; // 配置(重要:一定要配置详细,一定要!!!) const GroupUser = app.model.define('group_user', { id: { type: INTEGER(20).UNSIGNED, primaryKey: true, autoIncrement: true }, user_id: { type: INTEGER(20).UNSIGNED, allowNull: false, comment: '用户id', // 定义外键(重要) references: { model: 'user', // 对应表名称(数据表名称) key: 'id' // 对应表的主键 }, onUpdate: 'restrict', // 更新时操作 onDelete: 'cascade' // 删除时操作 }, group_id: { type: INTEGER(20).UNSIGNED, allowNull: false, comment: '群组id', // 定义外键(重要) references: { model: 'group', // 对应表名称(数据表名称) key: 'id' // 对应表的主键 }, onUpdate: 'restrict', // 更新时操作 onDelete: 'cascade' // 删除时操作 }, nickname: { type: STRING(30), allowNull: false, defaultValue: '', comment: '在群里的昵称', }, created_at: DATE, updated_at: DATE }); // 定义关联关系 GroupUser.associate = function(model){ GroupUser.belongsTo(app.model.User,{ foreignKey:'user_id' }); }; return GroupUser; };
app/controller/group.js
// 查看群资料 async info() { const { ctx, app } = this; let current_user_id = ctx.authUser.id; // 验证参数 ctx.validate({ id: { required: true, type: 'int', desc: "群组id" } }); let { id } = ctx.params; // 群组是否存在 let group = await app.model.Group.findOne({ where: { status: 1, id }, include: [{ model: app.model.GroupUser, attributes: ['user_id', 'nickname'], include: [{ model: app.model.User, attributes: ['id', 'nickname', 'avatar', 'username'] }] }] }); if (!group) { return ctx.apiFail('该群聊不存在或者已被封禁'); } // 当前用户是否是该群成员 let index = group.group_users.findIndex(item => item.user_id === current_user_id); if (index === -1) { return ctx.apiFail('你不是该群成员,没有权限'); } ctx.apiSuccess(group); }
router.js
// 获取群资料 router.get('/group_info/:id',controller.group.info);
下图是我测试的结果
感谢大家观看,我们下次见