技术栈感觉不错欢迎点个星^_^。前端:Express&EJS&ES6&Less&Gulp后端:Express&SocketIO&MongoDB&RESTAPI&Token部署:Linux&PM2全栈开发演示多人在线聊天室项目只适配移动端请使用浏览器的移动端查看。项目源码:https://github.com/bergwhite/nchat在线演示:http://y.bw2.me:8086目录├─bin│www//后端服务器│数据库//后端数据库│socket//返回-端插座|router//后端路由├─sessions//后端会话├─public│src//前端开发目录│dist//前端在线目录├─routes//前端路由├─view//前端页面├─app.js//前端服务器├─gulpfile.js//前端Gulp├─package.json安装项目是基于MIT协议的开源项目。启动项目前,请确保已安装mongodb,并在package.json(--dbpath)中修改MongoDB的安装路径Windows安装教程|Linux安装教程gitclonehttps://github.com/bergwhite/nodejs-chat//clone项目cdnodejs-chat//进入目录npminstall//安装依赖npmrunbuild//构建在线代码npmrunmongod//打开数据库npmrunstart//开启聊天室功能聊天√群聊×私聊√表情×斗图×更多表情√聊天机器人(图灵)用户√在线列表√随机头像√在线通知√离线通知√消息推送×上传头像√在线统计房间√房间列表√添加房间×搜索房间优化基础√代码压缩显示√如果之前没有设置头像,将显示默认头像√加载速度优化×界面换肤开发√组件化开发√模块化开发√RESTAPI√使用PM2部署√前后端分离×代码规范×测试用例安全√使用MD5+SALT保存密码√聊天内容过滤<>等特殊标签认证√Linux的Session部署&PM2踏坑图灵机器人不支持跨域,请求通过代理中间件代理到本地。varproxy=require('http-proxy-middleware');app.use('/api/robot',proxy({target:'http://www.tuling123.com',changeOrigin:true}));Gulp使用通配符处理多个文件并将它们压缩成一个文件。下面介绍如何单独进行压缩。constgulp=require('gulp'),minifyJS=require('gulp-uglifyjs'),babel=require('gulp-babel'),rename=require('gulp-rename');constcompileDir={css:{src:'public/src/css/index.less',dest:'public/dist/css'},js:{src:'public/src/js/',dest:'public/dist/js'}};gulp.task('compile-js',()=>{constJSTaskList=['index','login','mobile','room','roomAdd','userInfoMod','roomMember']returnJSTaskList.map((e)=>{gulp.src(`${compileDir.js.src}${e}.js`).pipe(babel({presets:['es2015']})).pipe(minifyJS()).pipe(rename((path)=>{path.basename+='.min'})).pipe(gulp.dest(compileDir.js.dest))})});gulp-uglifyjs-没有给出文件;中止缩小前删除了一个JS文件,但没有删除JSTaskList中对应的值。编译的时候会报上面的错误。删除对应的值,编译成功。
