var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var formidable = require('formidable');
var mysql = require('mysql');
var session = require('express-session');
var cookieParser = require('cookie-parser'); // 静态。
app.use(express.static('public'));
app.use(express.static('node_modules'));
app.use(cookieParser());
app.use(session({
secret:'randomstring',
resave: false,
saveUninitialized:true,
cookie:{
maxAge:600000,
hostOnly:true
}
})); // 配置 模版引擎。
app.set('view engine', 'ejs');
app.set('views', './views'); // 路由设置。
// 引入登录。
app.post('/doLogin', function(req, res){ var form = new formidable.IncomingForm(); // 表单处理。
form.parse(req, function(error, fields, files){ // 获取用户名和密码。
var username = fields.username;
var password = fields.password;
var rememberme = fields.rememberme; // 查询数据库。
var con = mysql.createConnection({
host:'localhost',
user:'root',
password:'',
database:'lamp183'
}); // 连接。
con.connect(); // 执行查询。
con.query("SELECT * FROM user WHERE username='"+ username +"'", function(err, results, fields){ // console.log(results[0].password);
// res.send('ok'); if(results.length <= 0)
{ res.json({'login': 0, 'data':'没有这个用户'});
return ;
} // 判断密码。
if(results[0].password != password)
{ res.json({'login': 0, 'data':'密码错误'}); }
else
{ // 判断是否记住我。
if(rememberme == 1)
{ res.cookie('admin', results[0], {maxAge: 600000000, hostOnly:true}); } // 将用户数据存入session
req.session.admin = results[0]; // 发送登录成功指令
res.json({'login': 1, 'data':results[0]}); } }); con.end();
return ; }); }); // 注册功能。
app.post('/doRegist', function(req, res){ var form = new formidable.IncomingForm(); // 表单处理。
form.parse(req, function(error, fields, files){ // console.log(fields);
var username = fields.username;
var password = fields.password;
var nickname = fields.nickname; // 查询数据库。
var con = mysql.createConnection({
host:'localhost',
user:'root',
password:'',
database:'lamp183'
}); // 连接。
con.connect(); // 执行添加。
con.query("INSERT INTO user(username,password,nickname) VALUES('"+ username +"','"+ password +"','"+ nickname +"')", function(err, results, fields){ // console.log(results);
if(results.affectedRows > 0)
{ res.json({'regist':1, 'info':'注册成功,请登录'}); }
else
{ res.json({'regist':0, 'info':'注册失败'}); } }); con.end();
return ; }); }); // 监听。
server.listen(8080); // 引入聊天室页面。
app.get('/', function(req, res){ // 判断用户是否已经登录。
if(req.session.admin || req.cookies.admin)
{ res.render('index2'); io.on('connection', function(socket){ if(req.session.admin)
{ socket.emit('nolog', req.session.admin); }
else if(req.cookies.admin)
{ socket.emit('nolog', req.session.admin); } }); }
else{ res.render('index'); } // res.render('index');
// console.log(req.session.admin); }); var users = []; // 建立连接
io.on('connection', function(socket) { socket.on('login', function(data){ // console.log(data.data.nickname);
// 保存所有用户。
var u = {nickname:data.data.nickname};
users.push(u); }); socket.on('users', function(){ // 发送给所有客户端。
socket.emit('users', users); }); // 监听消息
socket.on('send', function(data){
// console.log(data);
// 发送给所有用户。
socket.broadcast.emit('receiver', data); }); }); // 退出登录功能。
app.get('/logout', function(req, res){ // 清空session和cookie
if(req.session.admin)
{ var name = req.session.admin.nickname
delete(req.session.admin); }
else
{
var name = req.session.admin.nickname
res.cookie('admin', 1, {maxAge: -1, hostOnly:true});
} // 跳转登录页面。
res.redirect('/');
return ; });

node.js代码二的更多相关文章

  1. 玩转Node.js(二)

    玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给h ...

  2. 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因

    <超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...

  3. 我们为什么要看《超实用的Node.JS代码段》

    不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1.     ...

  4. Edge.js:让.NET和Node.js代码比翼齐飞

    通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...

  5. 《超实用的Node.js代码段》连载二:正确拼接Buffer

    对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出 ...

  6. 初学node.js有感二

    node.js进阶 一.回顾与继续   对于一种语言的认识都是经历这样的一个过程的,首先从原生的环境(CMD)中开始学习,找到一门语言之间各种引用的本质和相互之间的调用方式,明澈各种依赖关系,在这个基 ...

  7. node.js 生成二维码

    因为自己的项目中,想在商品详情页上 显示一个 商品优惠券的二维码. 以此为需求. node.js 后台代码 const qr_image = require("qr-image") ...

  8. node.js问题二

    看了Node.js开发指南发现routes和app.js分开的话要使用下面代码 app.use(express.router(routes)) 但是真正是使用上面代码会遇到无数的问题报错 找了资料才发 ...

  9. 8 行 Node.js 代码实现代理服务器

    接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性.同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势.今天就来看看作 ...

随机推荐

  1. 详解如何实现斗鱼、B站等全局悬浮窗直播小窗口

    最近业务需求需要我们直播返回或者退出直播间时,开一个小窗口在全局继续直播视频,先看效果图. 调研了一下当下主流直播平台,斗鱼.BiliBili等app,都是用WindowManger做的(这个你可以在 ...

  2. Linux学习第六天

    学习Linux环境下的挂载命令. 什么是挂载命令? 1.Windows下,mount挂载,就是给磁盘分区提供一个盘符(C,D,E,...).比如插入U盘后系统自动分配给了它I:盘符其实就是挂载,退优盘 ...

  3. 记一次:Windows的Socket编程学习和分析过程

    Socket编程依赖于:WS2_32.dll --- 服务端 --- .导入我们需要的函数 #incldue <windows.h> //#include<WinSock2.h> ...

  4. 33. CentOS7 静态ip设置

    1.网络连接选择NAT模式: 2.关闭vmware的dhcp:选择编辑-->虚拟网络编辑器,选择VMnet8,去掉使用本地DHCP服务将ip地址分配给虚拟机(D). 3. 点击NAT设置(S)查 ...

  5. TensorFlow 趣题

    checkpoint 文件夹 Tensorflow训练后的模型可以保存checkpoint文件,checkpoint文件是结构与权重分离的四个文件,便于训练. 1)checkpoint 文件 保存断点 ...

  6. 动态规划/MinMax-Stone Game

    2019-09-07 16:34:48 877. Stone Game 问题描述: 问题求解: 典型的博弈问题,也是一个典型的min-max问题.通常使用算diff的方法把min-max转为求max. ...

  7. MATLAB中mean的用法

    https://blog.csdn.net/wangyang20170901/article/details/78745587 MATLAB中mean的用法 转载仙女阳 最后发布于2017-12-07 ...

  8. 自动驾驶研究回顾:CVPR 2019摘要

    我们相信开发自动驾驶技术是我们这个时代最大的工程挑战之一,行业和研究团体之间的合作将扮演重要角色.由于这个原因,我们一直在通过参加学术会议,以及最近推出的自动驾驶数据集和基于语义地图的3D对象检测的K ...

  9. POJ - 3255 SPFA+邻接表求次短路径

    题意:给出m条边 , n个顶点,u [ i ]到v [ i ] 的距离w [ i ],求除了最短路的那条最短的边的长度. 思路:之前有做过相似的题,使用迪杰斯特拉算法求单源最短路径,并且记录路径,枚举 ...

  10. 给 EF Core 查询增加 With NoLock

    给 EF Core 查询增加 With NoLock Intro EF Core 在 3.x 版本中增加了 Interceptor,使得我们可以在发生低级别数据库操作时作为 EF Core 正常运行的 ...