1 var express = require('express'); 2 var app = express(); 3 var server = require('http').Server(app); 4 var io = require('socket.io')(server); 5 var formidable = require('formidable'); 6 var mysql = require('mysql'); 7 var session = require('express-session'); 8 var cookieParser = require('cookie-parser'); 9 10 // 静态。 11 app.use(express.static('public')); 12 app.use(express.static('node_modules')); 13 app.use(cookieParser()); 14 app.use(session({ 15 secret:'randomstring', 16 resave: false, 17 saveUninitialized:true, 18 cookie:{ 19 maxAge:600000, 20 hostOnly:true 21 } 22 })); 23 24 // 配置 模版引擎。 25 app.set('view engine', 'ejs'); 26 app.set('views', './views'); 27 28 // 路由设置。 29 // 引入登录。 30 app.post('/doLogin', function(req, res){ 31 32 var form = new formidable.IncomingForm(); 33 34 // 表单处理。 35 form.parse(req, function(error, fields, files){ 36 37 // 获取用户名和密码。 38 var username = fields.username; 39 var password = fields.password; 40 var rememberme = fields.rememberme; 41 42 // 查询数据库。 43 var con = mysql.createConnection({ 44 host:'localhost', 45 user:'root', 46 password:'', 47 database:'lamp183' 48 }); 49 50 // 连接。 51 con.connect(); 52 53 // 执行查询。 54 con.query("SELECT * FROM user WHERE username='"+ username +"'", function(err, results, fields){ 55 56 // console.log(results[0].password); 57 // res.send('ok'); 58 59 if(results.length <= 0) 60 { 61 62 res.json({'login': 0, 'data':'没有这个用户'}); 63 return ; 64 } 65 66 // 判断密码。 67 if(results[0].password != password) 68 { 69 70 res.json({'login': 0, 'data':'密码错误'}); 71 72 } 73 else 74 { 75 76 // 判断是否记住我。 77 if(rememberme == 1) 78 { 79 80 res.cookie('admin', results[0], {maxAge: 600000000, hostOnly:true}); 81 82 } 83 84 // 将用户数据存入session 85 req.session.admin = results[0]; 86 87 // 发送登录成功指令 88 res.json({'login': 1, 'data':results[0]}); 89 90 } 91 92 }); 93 94 con.end(); 95 return ; 96 97 }); 98 99 }); 100 101 // 注册功能。 102 app.post('/doRegist', function(req, res){ 103 104 var form = new formidable.IncomingForm(); 105 106 // 表单处理。 107 form.parse(req, function(error, fields, files){ 108 109 // console.log(fields); 110 var username = fields.username; 111 var password = fields.password; 112 var nickname = fields.nickname; 113 114 // 查询数据库。 115 var con = mysql.createConnection({ 116 host:'localhost', 117 user:'root', 118 password:'', 119 database:'lamp183' 120 }); 121 122 // 连接。 123 con.connect(); 124 125 // 执行添加。 126 con.query("INSERT INTO user(username,password,nickname) VALUES('"+ username +"','"+ password +"','"+ nickname +"')", function(err, results, fields){ 127 128 // console.log(results); 129 if(results.affectedRows > 0) 130 { 131 132 res.json({'regist':1, 'info':'注册成功,请登录'}); 133 134 } 135 else 136 { 137 138 res.json({'regist':0, 'info':'注册失败'}); 139 140 } 141 142 }); 143 144 con.end(); 145 return ; 146 147 }); 148 149 }); 150 151 // 监听。 152 server.listen(8080); 153 154 // 引入聊天室页面。 155 app.get('/', function(req, res){ 156 157 // 判断用户是否已经登录。 158 if(req.session.admin || req.cookies.admin) 159 { 160 161 res.render('index2'); 162 163 io.on('connection', function(socket){ 164 165 if(req.session.admin) 166 { 167 168 socket.emit('nolog', req.session.admin); 169 170 } 171 else if(req.cookies.admin) 172 { 173 174 socket.emit('nolog', req.session.admin); 175 176 } 177 178 }); 179 180 } 181 else{ 182 183 res.render('index'); 184 185 } 186 187 // res.render('index'); 188 // console.log(req.session.admin); 189 190 }); 191 192 var users = []; 193 194 // 建立连接 195 io.on('connection', function(socket) { 196 197 socket.on('login', function(data){ 198 199 // console.log(data.data.nickname); 200 // 保存所有用户。 201 var u = {nickname:data.data.nickname}; 202 users.push(u); 203 204 }); 205 206 socket.on('users', function(){ 207 208 // 发送给所有客户端。 209 socket.emit('users', users); 210 211 }); 212 213 // 监听消息 214 socket.on('send', function(data){ 215 // console.log(data); 216 // 发送给所有用户。 217 socket.broadcast.emit('receiver', data); 218 219 }); 220 221 }); 222 223 // 退出登录功能。 224 app.get('/logout', function(req, res){ 225 226 // 清空session和cookie 227 if(req.session.admin) 228 { 229 230 var name = req.session.admin.nickname 231 delete(req.session.admin); 232 233 } 234 else 235 { 236 var name = req.session.admin.nickname 237 res.cookie('admin', 1, {maxAge: -1, hostOnly:true}); 238 } 239 240 // 跳转登录页面。 241 res.redirect('/'); 242 return ; 243 244 });