router.js
// 发送消息 router.post('/chat/send',controller.chat.send);
app/controller/chat.js
// app/controller/chat.js const Controller = require('egg').Controller; class ChatController extends Controller { // 连接socket async connect() { const { ctx, app } = this; if (!ctx.websocket) { ctx.throw(400,'非法访问'); } // console.log(`clients: ${app.ws.clients.size}`); // 监听接收消息和关闭socket ctx.websocket .on('message', msg => { // console.log('接收消息', msg); }) .on('close', (code, reason) => { // 用户下线 console.log('用户下线', code, reason); let user_id = ctx.websocket.user_id; if (app.ws.user && app.ws.user[user_id]) { delete app.ws.user[user_id]; } }); } // 发送消息 async send(){ const {ctx,app} = this; // 用户id let current_user_id = ctx.authUser.id; // 验证参数 ctx.validate({ to_id:{ type:'int', require:true, desc:'接收人/群id' }, chat_type:{ type:'string', require:true, range:{in:['user','group']}, desc:'接收类型' }, type:{ type:'string', require:true, range:{in:['text','image','video','audio']}, desc:'消息类型' }, data:{ type:'string', require:true, desc:'消息内容' } }); // 获取参数 let {to_id,chat_type,type,data} = ctx.request.body; // 单聊 if(chat_type=='user'){ // 验证好友是否存在,并且对方没有把你拉黑 let Friend = await app.model.Friend.findOne({ where:{ user_id:to_id, friend_id:current_user_id, isblack:0 }, include:[{ model:app.model.User, as:'userInfo' },{ model:app.model.User, as:'friendInfo' }] }); if(!Friend){ return ctx.apiFail('对方不存在或者已把你拉黑'); } // 验证好友是否被禁用 if(!Friend.userInfo.status){ return ctx.apiFail('对方已经被禁用'); } } // 验证 } } module.exports = ChatController;