node.js代码二
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代码二的更多相关文章
- 玩转Node.js(二)
玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给h ...
- 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因
<超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...
- 我们为什么要看《超实用的Node.JS代码段》
不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1. ...
- Edge.js:让.NET和Node.js代码比翼齐飞
通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...
- 《超实用的Node.js代码段》连载二:正确拼接Buffer
对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出 ...
- 初学node.js有感二
node.js进阶 一.回顾与继续 对于一种语言的认识都是经历这样的一个过程的,首先从原生的环境(CMD)中开始学习,找到一门语言之间各种引用的本质和相互之间的调用方式,明澈各种依赖关系,在这个基 ...
- node.js 生成二维码
因为自己的项目中,想在商品详情页上 显示一个 商品优惠券的二维码. 以此为需求. node.js 后台代码 const qr_image = require("qr-image") ...
- node.js问题二
看了Node.js开发指南发现routes和app.js分开的话要使用下面代码 app.use(express.router(routes)) 但是真正是使用上面代码会遇到无数的问题报错 找了资料才发 ...
- 8 行 Node.js 代码实现代理服务器
接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性.同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势.今天就来看看作 ...
随机推荐
- ggplot2(2) 从qplot开始入门
2.1 简介 qplot的意思是快速作图(quick plot). qplot是一种快捷方式,如果您已习惯于使用基础plot(),则可以使用它.它可以使用一致的调用模式快速创建许多不同类型的图. qp ...
- selenium (四) WebDriverWait 与 expected_conditions
在介绍WebDriverWait之前,先说一下,在selenium中的两种等待页面加载的方式,第一种是隐式等待,在webdriver里面提供的implicitly_wait()方法,driver.im ...
- Python基础类型(1)
整数 整数在Python中的关键字用int来表示; 整型在计算机中运于计算和比较 在32位机器上int的范围是: -2**31-2**31-1,即-2147483648-2147483647 在64 ...
- Excel 电子表格中,快速修改表格中的数值
打开设置单元格设置选项后,当前界面,分类下面的选项中,选择“自定义”,并在右侧展示的“类型(T)”下方的对话框中,输入以下代码: [=1]√;[=2]×; 并按确认, [=1] 意思为: 将单元格中, ...
- 菜鸟对java和Go的理解
1.go对比java go通过结构体嵌套+接口实现类似面向对象中的继承和多态.个人认为尤其是go的接口抓住了多态的本质.而Go提倡的面向接口的思想也可能使得架构上更加解耦. 2.关于Go不要通过共享内 ...
- Java第一节课考试
1 package kaoshi; import java.util.Scanner; public class ScoreInformation { Scanner input=new Scanne ...
- JavaScript进阶之高阶函数篇
JavaScript进阶之高阶函数篇 简介:欢迎大家来到woo爷说前端:今天给你们带来的是JavaScript进阶的知识,接下来的系列都是围绕着JavaScript进阶进行阐述:首先我们第一篇讲的是高 ...
- Arch Linux安装配置-双系统(1)
Arch Linux启动盘准备: 在Windows下安装Win32 Disk Imager,打开页面,点击Download即可! 安装配置 1.选择我同意 2.选择安装位置路径 3.打勾,在桌面显示图 ...
- ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory
问题描述: ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory 首先检 ...
- adb软件国产安卓手机对系统的把控
国产安卓手机对系统的把控,现在想搞机的方法是愈来愈麻烦,华为最先的申请解锁码,到现在直接系统锁死不给解.让我等搞机小伙伴是望机兴叹.安卓手机的通病随着系统升级,手机就越来越卡.本想通过卸载系统自带应用 ...