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 });