uni-app 68 egg.js发送消息接口开发-单聊

Posted 2019ab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uni-app 68 egg.js发送消息接口开发-单聊相关的知识,希望对你有一定的参考价值。

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;

以上是关于uni-app 68 egg.js发送消息接口开发-单聊的主要内容,如果未能解决你的问题,请参考以下文章

uni-app 69发送消息接口开发-单聊

uni-app 65egg.js聊天类chat.js封装

uni-app 63egg.js后端用户上线和下线深度剖析

微信小程序开发--消息推送配置

egg.js redis subscribe multiple channel

Egg.js 异常处理中间件jwt,实现接口权限控制