nodejs实现在线聊天室

Posted qmdx00

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs实现在线聊天室相关的知识,希望对你有一定的参考价值。

源码地址:https://github.com/qmdx00/AszedRoom/tree/master/Aszed

上线地址:http://119.23.243.252:3000/

求star QAQ

用到的技术:express做后端服务,bootstrap实现前端ui,socket.io做服务端和客户端的通信,mongodb存储数据。

首先用express工具创建express项目,目录结构如下:

技术分享图片

阿里云短信服务:https://dysms.console.aliyun.com/dysms.htm?spm=5176.2020520001.aliyun_sidebar.138.836e4bd3Ddkpdu#/overview

注册并申请签名和模板。

在config里面创建smsConfig.js文件用来导出AccessKeyID和AccessKeySecret

再创建dbConfig.js导出mongodb的url和配置。

在socket文件夹中创建server.js

技术分享图片

导出io监听,在www启动文件中监听服务端

技术分享图片

用mongoose模块操作mongodb数据库,创建Schema再创建model,通过model创建实例,例如注册功能的实现

再schemas文件夹中创建userSchema.js

 

const mongoose = require(‘mongoose‘);

module.exports = new mongoose.Schema({
    userName: {
        type: String,
        unique: true
    },
    userPwd: {
        type: String
    },
    userPhone: {
        type: String,
        unique: true
    },
    created: {
        type: Date,
        default: Date.now()
    }
}, {
    versionKey: false
});

 

在models文件夹中创建对应的userModel.js

const mongoose = require(‘mongoose‘);
const userSchema = require(‘../schemas/userSchema‘);

module.exports = mongoose.model(‘user‘, userSchema);

 

即可在路由中处理user用户模型。

在utils中创建util.js用来操作数据库,导出为一个对象

技术分享图片

即可通过导出直接使用该方法。再添加路由逻辑即可。

 

 

验证码的逻辑:

后端生成随机的六位数的验证码,通过短信发送到用户手机,同时发送一份加密过的到客户端,通过加密用户输入的验证码匹配接受的后端加密后的验证码是否相等来判断验证码的正误。

在线人数统计逻辑:

处理socket.io的客户端连接方法,每连接一个客户端先获取cookie判断用户身份,再便利online数组查找是否在数组内,不在就push进去,再更新mongodb。

以上是关于nodejs实现在线聊天室的主要内容,如果未能解决你的问题,请参考以下文章

干货|使用AngularJS+nodejs实现聊天室

[NodeJS]使用Node.js写一个简单的在线聊天室

原生nodejs编写在线聊天系统

nodejs+websocket制作聊天室视频教程

即时聊天软件的原理,Web网页的聊天又是怎么实现的呢?

nodejs开发实战详解