项目背景

这个项目主要是为了玩玩NodeJS,项目的方向大概是做出类似QQ的在线聊天系统。想要在线体验可以点击在线演示

项目使用PM2进行部署和管理,功能在不断的迭代开发中。如果你觉得这个项目比较有趣,或者能对你有所帮助,欢迎给个Star。

项目地址:https://github.com/bergwhite/nchat

PS: 最近找工作,北京的欢迎联系。另外之前做过一个基于Vue全家桶二次开发的V2EX社区 https://github.com/bergwhite/v2ex-vue

项目目录


├─bin
│ www // 启动express
├─database
│ index.js // MongoDB
├─public // 静态文件
│ css
│ index.css // 首页CSS
│ js
│ index.js // 与socket服务进行通讯(关键文件)
| socket-server.js // socket服务(关键文件)
│ img
├─routers
│ index.js // 页面路由
├─view
│ error.ejs // 错误页
│ index.ejs // 首页
│ userCenter.ejs // 用户中心(规划中)
│ userList.ejs // 用户列表(规划中)
├─app.js // express
├─package.json // npm包

路由

目前只有/目录和/room/:id正式使用了,其他路由的页面还在迭代开发中。


/ // 首页
/user // 用户列表
/user/:id // 用户中心
/user/:id/register // 注册(JSON)
/user/:id/login // 登陆(JSON)
/user/:id/logout // 注销(JSON)
/user/:id/info // 用户资料(JSON)
/room/:id // 指定聊天室

开始安装

使用之前,请在package.json中修改MongoDB的安装路径(--dbpath)。


git clone https://github.com/bergwhite/nodejs-chat // 克隆项目到本地
cd nodejs-chat // 进入项目目录
npm install // 安装依赖
npm run build // 构建线上代码
npm run mongod // 启动MongoDB服务
npm run start // 启动聊天室服务并启动网站

项目演示

目前项目存在一个已知的bug,表情包无法在div模拟的输入框中插入(修复中)。

匿名聊天

用户聊天

成员&房间

离线通知

更多房间

房间独立

已上线功能

  • 跨浏览器,跨地域聊天(SocketIO自带技能)
  • 首次进入会显示欢迎信息
  • 发送空消息会进行提示
  • 直接发送消息默认昵称为“神秘人”
  • 发送消息后会清空当前输入框内容,然后焦点回到消息输入框
  • 添加用户名后会成为新用户,然后告知全房间人有新用户加入
  • 可以创建不同的房间,不同的房间的聊天是相互独立的
  • 显示当前房间的在线用户(设置了用户名的)
  • 显示目前所有打开的房间
  • 用户(设置了用户名的)离线会通知所有房间内的成员
  • 压缩线上代码,加快访问速度
  • ...

待上线功能

用户名

  • 统计匿名用户
  • 支持一键随机获取用户名

头像

  • 访客使用默认头像
  • 新用户(设置了用户名的)随机获得一个头像
  • 新用户换头像可以从默认的一组头像中选择
  • 是否支持上传头像还在考虑中(安全性问题)

聊天

  • 支持多组丰富的表情包
  • 是否支持上传图片还在考虑中(安全性问题)

数据库

  • 对接MongoDB,新用户(设置了用户名的)设置密码后,将从临时用户转变为正式用户

项目缺陷

  • 界面丑(等功能完善了再考虑)
  • 表情包无法在div模拟的输入框中插入(修复中)
  • ...

NodeJS在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)的更多相关文章

  1. 用NodeJS打造多人在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)

    项目背景 这个项目主要是为了玩玩NodeJS,项目的方向大概是做出类似QQ的在线聊天系统.想要在线体验可以点击在线演示. 项目使用PM2进行部署和管理,功能在不断的迭代开发中.如果你觉得这个项目比较有 ...

  2. AngularJS+Node.js+socket.io 开发在线聊天室

    所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍 ...

  3. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  4. 基于Server-Sent Event的简单在线聊天室

    Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览知乎时 ...

  5. 三、jQuery--jQuery基础--jQuery基础课程--第12章 jQuery在线聊天室

    在线聊天室案例 一.功能简介: 1.用户需要登录后才能进入聊天室交流 2.已无刷新的方式,动态展示交流后的内容和在线人员的基本信息 3.登录后的用户可以提交文字和表情图标 技术重点:利用ajax的无刷 ...

  6. 在线聊天室的实现(1)--websocket协议和javascript版的api

    前言: 大家刚学socket编程的时候, 往往以聊天室作为学习DEMO, 实现简单且上手容易. 该Demo被不同语言实现和演绎, 网上相关资料亦不胜枚举. 以至于很多技术书籍在讲解网络相关的编程时, ...

  7. 基于JQuery+JSP的无数据库无刷新多人在线聊天室

    JQuery是一款非常强大的javascript插件,本文就针对Ajax前台和JSP后台来实现一个无刷新的多人在线聊天室,该实现的数据全部存储在服务端内存里,没有用到数据库,本文会提供所有源程序,需要 ...

  8. 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

    基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...

  9. 百度前端面试题-类似slack的在线聊天室

    别人国庆出去玩,我在家写代码的感觉也是很不错哒. 首先介绍一下技术架构吧! 使用了js框架:FFF,zepto,jquery,md5.min.js 前端框架:Bootstrap 后端:野狗,部分PHP ...

随机推荐

  1. vue学习笔记-one

    学习vue基础以来,看各种教程,练习,随手写写,有错误请大家指导, 目前vue已经升级到2.0的版本,学习也最好是2.0的版本开始. 先看vue的几个特点:1,简单,2,轻量,3,模块友好 4, 组件 ...

  2. 使用validator-api来验证spring-boot的参数

    作为服务端开发,验证前端传入的参数的合法性是一个必不可少的步骤,但是验证参数是一个基本上是一个体力活,而且冗余代码繁多,也影响代码的可阅读性,所以有没有一个比较优雅的方式来解决这个问题? 这么简单的问 ...

  3. JS 部分基础内容总结

    JavaScript 是脚本语言 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> ...

  4. .NET遇上Docker - Docker集成Cron定时运行.NETCore(ConsoleApp)程序.md

    配置项目的Docker支持 对于VS中Docker的配置,依旧重复一些废话. 给项目添加Docker支持,VS2015可以直接使用Docker for VS插件,VS2017在安装时选择容器支持.VS ...

  5. 【代码学习】GD库中图片缩印

    bool imagecopyresampled ( resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src ...

  6. JQuery 通过方向键控制div上下左右移动

    在CSS中当DOM元素的position属性为absolute或relative时,我们可以通过改变这个元素的left和top属性的具体值来控制元素在页面中显现的位置. 利用上述属性,我们可以简单实现 ...

  7. 572. Subtree of Another Tree

    Problem statement: Given two non-empty binary trees s and t, check whether tree t has exactly the sa ...

  8. node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了

    最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs.express 的代码就会看得一塌糊涂.比如: 复制代码 代码如下: app.use(fu ...

  9. 跨交换机相同vlan内的通信(trunk模式)

    当一个公司的小型局域网内部,处于不同楼层的主机处在同一个虚拟局域网内,连接到不同的交换机上,这时候就需要相同虚拟局域网内部的主机进行跨交换机进行通信. 通过设置交换机之间相连接的端口开启trunk模式 ...

  10. python循环

    #!/usr/bin/python #coding:utf-8 lcf_age = "19" count = 0 while count < 3: c_lcf_age = i ...