571
社区成员
发帖
与我相关
我的任务
分享本项目借助vue + express 实现了在线chatroom的demo。
通过注册页面每个用户都能注册自己的身份并进入一个在线聊天室进行聊天。聊天室不仅仅只能发送文字,还可以在emoj列表中选取表情发送。
Vue:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。
Express:Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用。Express 不对 node.js 已有的特性进行二次抽象,我们只是在它之上扩展了Web应用所需的功能。丰富的HTTP工具以及来自Connect框架的中间件随取随用,创建强健、友好的API变得快速又简单。
相关介绍均来源于百度百科
本项目是一个前后端分离的项目,前端的client与后端的server通信是基于socket.io进行实现的。前端部分的实现是另一位同学的工作,我主要负责后端部分的架构编写以及前端部分的路由分发。
import Vue from 'vue'
import vueRouter from 'vue-router'
import {
Toast
} from 'vant'
Vue.use(vueRouter)
const Layout = () => (import('@/layout/index.vue'));
const ChatRoom = () => (import('@/pages/chatRoom/index.vue'));
const List = () => (import('@/pages/list/index.vue'));
const Home = () => (import('@/pages/home/index.vue'));
const Login = () => (import('@/pages/login/index.vue'));
const router = new vueRouter({
mode: 'history',
routes: [{
path: "/",
name: 'Layout',
component: Layout,
redirect: "/list",
children: [{
path: '/home',
name: 'Home',
component: Home
},
{
path: '/list',
name: 'List',
component: List
},
],
},
{
path: '/chatRoom',
name: 'ChatRoom',
component: ChatRoom
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/*',
redirect: '/home'
}
]
})
router.beforeEach((to, from, next) => {
if (to.path === '/login') {
next();
} else {
const a = localStorage.getItem('Account');
if (a === "" || !a) {
Toast.fail('账号不存在');
next('/login');
} else {
next()
}
}
})
export default router;
管理群聊消息:根据建立的socket连接,如果是"join",那么判断此消息是加入群聊,并将用户加入的情况广播到所有人的列表中。如果是"dicconnect",那么就是用户选择退出群聊,将此信息广播。如果是"client",那么就是已经进入注册好的用户在群聊当中发消息,将其发送的消息在本群聊进行相应的广播。当启动对客户端消息的监听时,控制台会输出“监听开始”,提示已经正常启动。
在这里我们监听的是8081端口,如若将本项目部署在服务器上记得开放8081端口,我忘记开放调试了很久。
let app = require('express')();
let http = require('http').Server(app);
let io = require('socket.io')(http, {
cors: true //解决跨域问题
});
io.on('connection', function (socket) {
let name = '';
// 加入群聊
socket.on("join", function (message) {
name = message.name;
socket.broadcast.emit("joinNoticeOther", {
name,
});
})
//退出群聊
socket.on("disconnect", function () {
io.emit("disconnection", {
name,
});
});
//监听消息
socket.on("client", function (message) {
// 向所有客户端广播发布的消息
io.emit("message", message);
});
});
//当访问根目录时,返回Hello World
app.get('/', function (req, res) {
res.send('<h1>Hello world</h1>');
});
//启动监听
http.listen(8081, function () {
console.log('listening on ' + ' http://192.168.10.42:8081');
});
截图部分为前端同学部分的,截图水印也是他的






作者:NP600