Nodejs nestjs+vue+ts 打造一个酷炫的星空聊天室

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs nestjs+vue+ts 打造一个酷炫的星空聊天室

项目简介

😛 闲暇时间想做一个聊天室复盘一下这些年学习到的技术,于是就开始了阿童木聊天室的开发之旅 😈 项目采用全 typescript 开发,这是为了以后的功能迭代打基础.当然,我本身也是很喜欢 typescript 的 🧐 今后会陆续开发很多酷炫的功能,喜欢的朋友给个 star 鼓励一下我吧!

项目界面

2.png

项目技术

前端: vue + vue-router + vuex + socket.io + typescript + antd

后端: nestjs + nestjs/websocket + typescript

数据库表结构设计

3.png

功能介绍

  • 更改用户名 /头像上传
  • 群聊 /私聊
  • 新增群 /加入群聊 /模糊搜索群
  • 添加好友 /模糊搜索好友
  • 表情包
  • 消息分页

作者

github: edison

项目仓库

github: genal-chat

线上演示

genal.fun


16 回复

看起来和 fiora 很像 emmm,用的东西

是的 ui 上确实的参考 fiora 的 技术上碎碎大佬也给了一些支持

私聊消息表不要放在一起,时间长了就会膨胀的特别厉害

你听唔到我再肛,再听唔到我再肛,肛到你听到为止,都系果六个字 对唔住非凡哥

有什么好办法吗

看你怎么想了,有按时间拆表的,有按照人来拆表的,你决定就好

听起来好复杂啊 一个好友一张表很奇怪耶

根据关系建表就行= =,这种看人喜好

要是玩具就随意了,我的想法来源是:QQ 在全国有多少用户,一个用户说一句话,那这个表就多少行了?

确实 哈哈哈 不过 mysql 百万查询也才 1s 啊 还不到这个业务量

聊天室做了在线人数统计, 进来聊聊技术吧
https://www.genal.fungenal.fun

聊天室做了在线人数统计, 进来聊聊技术吧
https://www.genal.fun

打造一个基于 Node.js、NestJS、Vue 和 TypeScript 的酷炫星空聊天室是一个既有趣又富有挑战性的项目。以下是一个简要的实现思路和部分代码示例,帮助你快速上手。

后端(NestJS)

  1. 安装 NestJS

    npm i -g [@nestjs](/user/nestjs)/cli
    nest new starry-chat
    cd starry-chat
    
  2. 创建 WebSocket Gateway

    import { WebSocketGateway, WebSocketServer, SubscribeMessage, MessageBody } from '[@nestjs](/user/nestjs)/websockets';
    import { Server, Socket } from 'socket.io';
    
    [@WebSocketGateway](/user/WebSocketGateway)()
    export class ChatGateway {
      @WebSocketServer() server: Server;
    
      @SubscribeMessage('message')
      handleMessage(@MessageBody() message: string): string {
        this.server.emit('message', message);
        return 'Message received';
      }
    }
    

前端(Vue + TypeScript)

  1. 安装 Vue CLI 并创建项目

    npm install -g [@vue](/user/vue)/cli
    vue create starry-chat-frontend
    cd starry-chat-frontend
    
  2. 安装 Socket.IO 客户端

    npm install socket.io-client
    
  3. 在 Vue 组件中连接 WebSocket

    import { io } from 'socket.io-client';
    const socket = io('http://localhost:3000');
    
    socket.on('message', (msg: string) => {
      console.log(msg);
    });
    
    const sendMessage = (message: string) => {
      socket.emit('message', message);
    };
    

星空背景

使用 CSS 或 SVG 来实现星空背景,并结合 Vue 的动态数据绑定来展示聊天消息。这样,一个基本的星空聊天室就完成了。你可以进一步美化界面,增加用户认证、消息存储等功能。

回到顶部