撸一个聊天室(vue+koa2+websokect+mongodb)

撸一个聊天室(vue+koa2+websokect+mongodb)

本篇博客主要介绍聊天室项目,作者学习vue和node时间较短,若有什么错误或建议,欢迎指出,谢谢~


贴上源码链接 -> 源码

vue的布局在这就不说了,大家可以查看源码。

效果图如下:

效果图
首先来看一个聊天室需要哪些功能:

  1. 发消息(单聊)
  2. 添加好友
  3. 发表情和图片
  4. 发文件

这三个算是聊天室需要的最基本的功能,其他功能还可以自己拓展,在我的源码中还实现了离线消息、禁止多端登录以及富文本功能。首先需要了解的是如何在vue中使用webSocket。

// 在vue中使用webSocket,需要使用vue-socket.io
// 下载
npm i vue-socket.io -D

// main.js
import VueSocketio from 'vue-socket.io'
Vue.use(VueSocketio, 'http://localhost:8888/') // 第二个参数为服务端地址
// 在vue中定义socket属性
sockets: {
    // 不能改
  // 定义服务端需要调用的方法
  getOnlineNum: function (num) {
   
    this.onlineNum = num
  }
}

// 调用方法
this.$socket.emit('signIn', 'username')

服务端使用的是koa2 + socket.io

const app = new Koa()

const server = require('http').createServer(app.callback())
const io = require('socket.io')(server)
server.listen(process.env.PORT) // 监听端口号

// socket
// 每个用户登录时,将他们的用户名和socketID通过键值对存起来,方便单聊时向指定用户发送
// 通过用户获取socketID,通过socketID获取用户名
let user = {
   } // 键值对:username: socketID
let socketID = {
   } // 键值对: socketID: username

// socket连接
io.on('connection', function (socket) {
   
  // 注册signIn方法,在vue登录时调用
  socket.on('signIn', function (username) {
   
    user[username] = socket.id
    socketID[socket.id] = username
    // 获取当前在线人数
    io.sockets.emit('getOnlineNum', Object.keys(socketID).length)
  })
  // 断开连接
  socket.on('disconnect', function () {
   
    const username = socketID[socket.id] // 获取下线的用户
    delete socketID[socket.id]
    delete user[username]
    io.sockets.emit('getOnlineNum', Object.keys(socketID).length)
    console.log(username + '下线')
  })
})

其实webSocket的用法就是在双向调用,客户端注册服务端要调用的方法,服务端注册客户端要调用的方法。

实现单聊

编写单聊功能时需要注意,需要给输入框绑定当前聊天好友的消息变量,没有好友时单独绑定一个变量。

<textarea v-if="friends.length>0" @keyup.enter="send()" v-model="friends[nowChat].textmsg"></textarea>
<textarea v-else @keyup.enter="send(textmsg)" v-model="textmsg"></textarea>
// 点击发送按钮
send () {
   
  // 判断是否有好友
  if (this.friends.length > 0) {
   
    // 参数:1.方法名,2.消息,3.来自哪个用户,4.发送给哪个用户
    this.$socket.emit('receive', this.friends[this.nowChat].textmsg, this.curUsername, this.friends[this.nowChat].username)
  } else {
   
    alert('你还没有好友,先去加好友吧')
  }
}

// 服务端接收
socket.on('receive', function (msg, from, to) {
   
  let date = new Date().toTimeString().substr(0, 8) // 记录时间
  let socketId = user[to] // 查找接收方的socketID
  let meSocketId = user[from] // 查找发送方的socketID
  // 给自己发送一条
  io.sockets.sockets[meSocketId].emit('newMsg', {
   from:
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现最简单的注册登录功能,可以借助VueKoa2进行开发。 首先,在Vue中创建两个页面组件,一个是注册页面,一个是登录页面。注册页面通过表单收集用户的注册信息,包括用户名和密码,并发送POST请求给后端。登录页面同理,收集用户的登录信息,并发送POST请求给后端。 在Koa2中,需要使用koa-router中间件来处理路由,监听前端发送的注册和登录请求。对于注册请求,需要将用户提供的用户名和密码存储到数据库中。对于登录请求,需要从数据库中查询用户提供的用户名和密码是否匹配。 数据库可以选择使用MySQL、MongoDB等,具体可以根据实际需求选择。在Koa2中可以使用相应的数据库连接库进行连接和操作。 在注册和登录过程中,需要对用户的密码进行加密存储,可以使用bcyrpt等密码加密库进行加密。 另外,为了实现用户登录状态的保持,可以使用session或者token进行用户身份验证。当用户注册或登录成功后,将相应的用户信息存储到session或者token中。在后续用户的请求中,通过校验session或者token来验证用户的身份和权限。 当用户注册或登录成功后,可以在前端页面进行相应的提示或跳转,同时可以通过路由守卫等方式限制未登录用户的访问权限。 总的来说,VueKoa2可以很好地配合实现最简单的注册登录功能。具体实现过程可以根据项目需求和技术栈的选择进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值