赞
踩
项目github地址:项目地址
项目效果预览:
(不太擅长设计页面,有点花里胡哨)
在本地创建一个exercise的数据库,在数据库中创建一个user的数据表,这张数据表中存放了用户相关信息和其好友关系
字段有id,username,password,friends
其中friends存放每个用户的好友id,以逗号隔开
----登录注册页面的设计
按照上图进行登录注册页面设计,用户填写登录信息后,将用户名和密码post到后端进行数据库比对,成功后,可进入聊天页面,此时将用户的用户名存进cookie,cookie.js文件如下所示:
function setCookie(json, hours) { // 设置过期时间 let data = new Date( new Date().getTime() + hours * 60 * 60 * 1000 ).toUTCString(); for (var key in json) { document.cookie = key + "=" + json[key] + "; expires=" + data; } } /** * @description 获取cookie * @param {String} name 需要获取cookie的key */ function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) { return unescape(arr[2]) } else { return null } } /** * @description 删除cookie * @param {String} name 需要删除cookie的key */ function clearCookie(name) { let json = {}; json[name] = ''; setCookie(json, -1) } export default { setCookie, getCookie, clearCookie }
注册页面可将新的用户名和密码添加到数据库
—聊天界面的设计
聊天界面主要分为头部信息栏,左侧好友列表栏和右侧聊天界面
头部信息栏通过cookie获取到当前登录的用户,通过公开的天气api得到天气信息,并对应图片显示,获取当前时间格式化显示,右侧一个头像有下拉框
点击修改密码向后端发送修改密码请求,操作数据库进行修改,点击退出登录后,清除cookie,路由跳转到登录界面
好友列表栏通过v-for指令将获取到的好友显示在左侧,点击对应好友,右侧显示对应好友的聊天界面
聊天界面设计如上所示,通过下方输入框输入,调用智能机器人api自动回复显示
基于nodejs,将后端分为了服务模块index.js,配置模块config.js,路由模块router.js,路由处理模块handler.js,数据库操作模块data.js,用来对接前端需要处理的接口
其中router.js文件如下:
var express = require('express'); var path = require('path') var handler = require('./handler.js'); var bodyParser = require("body-parser"); var router = express.Router(); router.use('/resource',express.static(path.join(__dirname,'resource'))); // router.use('/resource',function(req,res){ // console.log('nihaoa'); // res.end('hello'); // }) router.post('/login',handler.loginHandler) router.post('/register',handler.registerHandler) router.post('/changePassword',handler.changePasswordHandler) router.post('/getFriends',handler.getFriendsHandler) router.post('/addFriend',handler.addFriendHandler) module.exports = router;
resource处理静态资源,其他接口都需要进行数据库操作
handler.js文件如下:
var data = require('./data.js'); module.exports.loginHandler = function(req,res){ data.login(req,res); } module.exports.registerHandler = function(req,res){ data.register(req,res) } module.exports.changePasswordHandler = function(req,res){ data.changePassword(req,res) } module.exports.getFriendsHandler = function(req,res){ data.getFriends(req,res) } module.exports.addFriendHandler = function(req,res){ data.addFriend(req,res) }
data.js文件如下:
var mysql = require('mysql'); var connection = mysql.createConnection({ host: '127.0.0.1', user: 'root', password: '123456', database: 'exercise' }) // 登录 module.exports.login = function(req,res){ body = "" req.on('data',function(chunk){ body += chunk; }); req.on('end',function(){ body = JSON.parse(body); connection.query("select username,password from user where username='" + body.username + "'",(err, data) => { if (err) { console.log("error!", err); } else { if(data.length==0){ result = { code:"200", msg:"userNull" } res.json(result) } else{ if(body.password == data[0].password){ result= { code:"200", msg:"OK" } res.json(result) } else{ result= { code:"200", msg:"passwordError" } res.json(result) } } } }); }); } // 注册 module.exports.register = function(req,res){ body = "" req.on('data',function(chunk){ body += chunk; }); req.on('end',function(){ body = JSON.parse(body); connection.query("select username,password from user where username='" + body.username + "'",(err, data) => { if (err) { console.log("error!", err); } else { if(data.length==0){ connection.query("insert into user(username,password) values(?,?)",[body.username,body.password],function(err1,result){ if(err1){ console.log("error!", err1); } else{ result = { code:"200", msg:"registerSuccess" } res.json(result) } }) } else{ result = { code:"200", msg:"userExist" } res.json(result) } } }); }); } // 修改密码 module.exports.changePassword = function(req,res){ body = "" req.on('data',function(chunk){ body += chunk; }); req.on('end',function(){ body = JSON.parse(body); connection.query("select username,password from user where username='" + body.username + "'",(err, data) => { if (err) { console.log("error!", err); } else { if(data[0].password != body.originalPassword){ result = { code:"200", msg:"originalError" } res.json(result) } else{ connection.query("update user set password=? where username=?",[body.newPassword,body.username],function(err1,result){ if(err1){ console.log("error",err1) } else{ result={ code:"200", msg:"changeSuccess" } res.json(result) } }) } } }); }); } // 获取好友列表 module.exports.getFriends = function(req,res){ body = "" req.on('data',function(chunk){ body += chunk; }); req.on('end',function(){ body = JSON.parse(body); connection.query("select friends from user where username='" + body.username + "'",(err, data) => { if (err) { console.log("error!", err); } else { connection.query("select username from user where id in ("+data[0].friends+')',function(err1,result){ if(err1){ console.log("error!",err1) } else{ res.json(result) } }) } }); }); } // 添加好友 module.exports.addFriend = function(req,res){ body = "" req.on('data',function(chunk){ body += chunk; }); req.on('end',function(){ body = JSON.parse(body); connection.query("select id from user where username='" + body.newFriend + "'",(err, data) => { if (err) { console.log("error!", err); } else { if(data.length == 0){ response = { code:"200", msg:"friendNotExist" } res.json(response) } else{ connection.query("select friends from user where username=?",[body.username],function(err1,result){ if(err1){ console.log("error!",err1) } else{ result = data[0].id + "," + result[0].friends connection.query("update user set friends = ? where username = ?",[result,body.username],function(err2,result1){ if(err2){ console.log("error!",err2) } else{ response = { code:"200", msg:"addSuccess" } res.json(response) } }) } }) } } }); }); }
没有过多涉及到页面优化和其他安全问题,欢迎读者修改指正,完整代码在页面顶端的链接中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。