diff --git a/build/dev-server.js b/build/dev-server.js index 42442d2..196d6a3 100644 --- a/build/dev-server.js +++ b/build/dev-server.js @@ -125,41 +125,55 @@ var server = app.listen(port) // var http = require('http').Server(app); var io = require('socket.io')(server); var Message = require('../models/message') -var users = {} +global.users = {} + io.on('connection', function (socket) { //监听用户发布聊天内容 socket.on('message', function (obj) { //向所有客户端广播发布的消息 - console.log(obj) - io.emit('message', obj) var mess = { username: obj.username, src:obj.src, msg: obj.msg, - roomid:'room1' + img: obj.img, + roomid: obj.room + } + io.to(mess.roomid).emit('message', mess) + console.log(obj.username + '对房' + mess.roomid+'说:'+ mess.msg) + if (obj.img === '') { + var message = new Message(mess) + message.save(function (err, mess) { + if (err) { + console.log(err) + } + console.log(mess) + }) } - var message = new Message(mess) - message.save(function (err, mess) { - if (err) { - console.log(err) - } - console.log(mess) - }) - console.log(obj.username + '说:' + obj.msg) }) socket.on('login',function (obj) { - socket.name = obj.name; - users[obj.name] = obj - io.emit('login', users) + socket.name = obj.name + socket.room = obj.roomid + if (!global.users[obj.roomid]) { + global.users[obj.roomid] = {} + } + global.users[obj.roomid][obj.name] = obj + socket.join(obj.roomid) + io.to(obj.roomid).emit('login', global.users[obj.roomid]) + console.log(obj.name + '加入了' + obj.roomid) }) - socket.on('logout',function (name) { - delete users[name] - io.emit('logout', users) + socket.on('logout',function (obj) { + delete global.users[obj.roomid][obj.name] + console.log(obj.name + '退出了' + obj.roomid) + io.to(obj.roomid).emit('logout', global.users[obj.roomid]) }) + socket.on('disconnect', function () { - delete users[socket.name] - //用户监听用退出聊天室 - io.emit('logout', users) + if (global.users[socket.room]) { + delete global.users[socket.room][socket.name] + // 用户监听用退出聊天室 + console.log(socket.name + '退出了' + socket.room) + io.to(socket.room).emit('logout', global.users[socket.room]) + } }) }) diff --git a/config/routes.js b/config/routes.js index f4e279b..d3b2670 100644 --- a/config/routes.js +++ b/config/routes.js @@ -1,6 +1,9 @@ var User = require('../models/user') var Message = require('../models/message') var superagent = require('superagent') +var fs = require('fs') +var multiparty = require('multiparty'); +var util = require('util') module.exports = function (app) { app.use(function (req, res, next) { var _user = req.session.user @@ -9,6 +12,65 @@ module.exports = function (app) { next() }) + app.post('/file/uploadimg', function (req, res, next) { + // console.log(util.inspect(req.body, { showHidden: true, depth: null })) + // console.log(util.inspect(req.header, { showHidden: true, depth: null })) + // //生成multiparty对象,并配置上传目标路径 + var form = new multiparty.Form() + // //设置编辑 + form.encoding = 'utf-8' + // //设置文件存储路径 + form.uploadDir = "./static/files/" + // //设置单文件大小限制 + form.maxFilesSize = 2 * 1024 * 1024 + // form.maxFields = 1000; 设置所以文件的大小总和 + // 上传完成后处理 + form.parse(req, function (err, fields, files) { + console.log(fields) + var filesTmp = JSON.stringify(files, null, 2) + console.log(filesTmp) + if (err) { + console.log('parse error: ' + err) + res.json({ + errno: 1 + }) + } else { + var inputFile = files.file[0]; + var uploadedPath = inputFile.path + var array = inputFile.originalFilename.split('.') + var imgtype = array[array.length - 1] + var dstPath = './static/files/' + new Date().getTime() + '.' + imgtype + //重命名为真实文件名 + fs.rename(uploadedPath, dstPath, function (err) { + if (err) { + console.log('rename error: ' + err) + res.json({ + errno: 1 + }) + } else { + var mess = { + username: fields.username, + src: fields.src, + img: dstPath, + roomid: fields.roomid + } + var message = new Message(mess) + message.save(function (err, mess) { + if (err) { + console.log(err) + } + console.log(mess) + }) + console.log('rename ok') + res.json({ + errno: 0 + }) + } + }) + } + }) + + }) // 注册 app.post('/user/signup', function (req, res) { var _user = req.body @@ -36,84 +98,88 @@ module.exports = function (app) { } }) }), - // 登录 - app.post('/user/signin', function (req, res) { - console.log(req.body) - var _user = req.body - var name = _user.name - var password = _user.password - console.log(password) - User.findOne({name: name}, function (err, user) { - if (err) { - console.log(err); - } - console.log(user) - if (!user) { - res.json({ - errno: 1, - data: '用户不存在' - }) - } else{ - if (!!password) { - user.comparePassword(password, function (err, isMatch) { - if (err) { - console.log(err); - } - if (isMatch) { - req.session.user = user; - console.log('success'); - res.json({ - errno: 0, - data: '登录成功', - name: name, - src: user.src - }) - } else { - res.json({ - errno: 1, - data: '密码不正确' - }) - console.log('password is not meached'); - } - }) - } else { + // 登录 + app.post('/user/signin', function (req, res) { + console.log(req.body) + var _user = req.body + var name = _user.name + var password = _user.password + console.log(password) + User.findOne({name: name}, function (err, user) { + if (err) { + console.log(err); + } + console.log(user) + if (!user) { res.json({ errno: 1, - data: '登录失败' + data: '用户不存在' }) + } else { + if (!!password) { + user.comparePassword(password, function (err, isMatch) { + if (err) { + console.log(err); + } + if (isMatch) { + req.session.user = user; + console.log('success'); + res.json({ + errno: 0, + data: '登录成功', + name: name, + src: user.src + }) + } else { + res.json({ + errno: 1, + data: '密码不正确' + }) + console.log('password is not meached'); + } + }) + } else { + res.json({ + errno: 1, + data: '登录失败' + }) + } } - } - }) - }), - // 信息 - app.get('/message',function (req, res) { - Message.find({}, function (err, message) { - if(err) { - console.log(err) - } else{ - res.json({ - errno: 0, - data: message - }) - } - }) - }), - // 机器人消息 - app.get('/robotapi',function (req, res) { - var response = res - var info = req.query.info - var userid = req.query.id - var key = 'fde7f8d0b3c9471cbf787ea0fb0ca043' - superagent.post('http://www.tuling123.com/openapi/api') - .send({info, userid, key}) - .end((err, res) => { - if(err){ + }) + }), + + // 信息 + app.get('/message', function (req, res) { + var id = req.query.roomid + // console.log(id) + Message.find({roomid: id}, function (err, message) { + if (err) { console.log(err) + } else { + // console.log(message) + res.json({ + errno: 0, + data: message + }) } - response.json({ - data: res.text - }) }) - }) + }), + // 机器人消息 + app.get('/robotapi', function (req, res) { + var response = res + var info = req.query.info + var userid = req.query.id + var key = 'fde7f8d0b3c9471cbf787ea0fb0ca043' + superagent.post('http://www.tuling123.com/openapi/api') + .send({info, userid, key}) + .end((err, res) => { + if (err) { + console.log(err) + } + response.json({ + data: res.text + }) + }) + }) } \ No newline at end of file diff --git a/prod.server.js b/prod.server.js index 0ffc198..f3576d3 100644 --- a/prod.server.js +++ b/prod.server.js @@ -6,9 +6,9 @@ var app = express(); var router = express.Router(); // 用于静态展示入口 -router.get('/',function(req,res,next){ - req.url = './index.html'; - next(); +router.get('/', function (req, res, next) { + req.url = './index.html'; + next(); }); app.use(router); @@ -24,7 +24,7 @@ var cookieParser = require('cookie-parser') var session = require('cookie-session') // 用于异步回调 mongoose.Promise = require('bluebird') -global.db = mongoose.connect("mongodb://localhost:27017/vuechat") +global.db = mongoose.connect("mongodb://localhost:27017/chat") // 服务器提交的数据json化 app.use(bodyParser.json()) @@ -51,44 +51,55 @@ var server = app.listen(port) // var http = require('http').Server(app); var io = require('socket.io')(server); var Message = require('./models/message') -var users = {} +global.users = {} + io.on('connection', function (socket) { //监听用户发布聊天内容 socket.on('message', function (obj) { //向所有客户端广播发布的消息 - io.emit('message', obj) var mess = { username: obj.username, src:obj.src, msg: obj.msg, - roomid:'room1' + img: obj.img, + roomid: obj.room } - var message = new Message(mess) - //将发送过来的消息进行储存 - message.save(function (err, mess) { - if (err) { - console.log(err) - } + io.to(mess.roomid).emit('message', mess) + console.log(obj.username + '对房' + mess.roomid+'说:'+ mess.msg) + if (obj.img === '') { + var message = new Message(mess) + message.save(function (err, mess) { + if (err) { + console.log(err) + } console.log(mess) - }) - console.log(obj.username + '说:' + obj.msg) + }) + } }) socket.on('login',function (obj) { - socket.name = obj.name; - users[obj.name] = obj - //用于监听用户进行聊天室 - io.emit('login', users) + socket.name = obj.name + socket.room = obj.roomid + if (!global.users[obj.roomid]) { + global.users[obj.roomid] = {} + } + global.users[obj.roomid][obj.name] = obj + socket.join(obj.roomid) + io.to(obj.roomid).emit('login', global.users[obj.roomid]) + console.log(obj.name + '加入了' + obj.roomid) }) - socket.on('logout',function (name) { - delete users[name] - //用户监听用退出聊天室 - io.emit('logout', users) + socket.on('logout',function (obj) { + delete global.users[obj.roomid][obj.name] + console.log(obj.name + '退出了' + obj.roomid) + io.to(obj.roomid).emit('logout', global.users[obj.roomid]) }) socket.on('disconnect', function () { - delete users[socket.name] - //用户监听用退出聊天室 - io.emit('logout', users) + if (global.users[socket.room]) { + delete global.users[socket.room][socket.name] + // 用户监听用退出聊天室 + console.log(socket.name + '退出了' + socket.room) + io.to(socket.room).emit('logout', global.users[socket.room]) + } }) }) diff --git a/schemas/message.js b/schemas/message.js index dd5a520..7e35d22 100644 --- a/schemas/message.js +++ b/schemas/message.js @@ -2,9 +2,16 @@ var mongoose = require('mongoose') //聊天记录模型 var MessageSchema = new mongoose.Schema({ username: String, - src:String, - msg: String, - roomid:String, + src: String, + msg: { + type: String, + default: '' + }, + roomid: String, + img: { + type: String, + default: '' + }, time: { type: Date, default: Date.now() diff --git a/src/assets/images.png b/src/assets/images.png new file mode 100644 index 0000000..89bfa3b Binary files /dev/null and b/src/assets/images.png differ diff --git "a/src/assets/\345\205\254\345\221\212.png" "b/src/assets/\345\205\254\345\221\212.png" new file mode 100644 index 0000000..5c9dd2d Binary files /dev/null and "b/src/assets/\345\205\254\345\221\212.png" differ diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 2935cc7..927a69e 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -7,63 +7,118 @@
聊天({{Object.keys(getusers).length}})
- + -
+
在线人员
+
+
- - + +
- - + +
-
- +
+
+ +
+ +
+
+
- +
-
+
diff --git a/src/components/Register.vue b/src/components/Register.vue index 7d74190..0d41bd3 100644 --- a/src/components/Register.vue +++ b/src/components/Register.vue @@ -7,9 +7,11 @@
-
-
- + +
+ +
+
我已有帐号 @@ -19,7 +21,7 @@ diff --git a/src/components/Robot.vue b/src/components/Robot.vue index 0100c6c..d72373b 100644 --- a/src/components/Robot.vue +++ b/src/components/Robot.vue @@ -1,8 +1,8 @@