node.js代码
// 1. 引入 express
var express = require('express');
var formidable = require('formidable');
var mysql = require('mysql');
var session = require('express-session');
var cookieParser = require('cookie-parser'); // 2. 实例化。
var app = express(); // 配置。
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'); // 3. 路由配置。
// 登录。
app.get('/admin/login', function(req, res){
// res.send('ok'); // console.log(req.session.info); // 解析模板。
res.render('admin-login'); });
app.post('/admin/login', function(req, res){ // req.session.info = null;
// 判断是否有 cookie
if(req.cookies.rememberme && req.session.admin){
res.redirect('/admin/index');
} // 实例化。
var form = new formidable.IncomingForm(); // 表单处理。
form.parse(req, function(error, fields, files){
// console.log(fields);
// 获取用户名 密码。
var name = fields.name;
var password = fields.password;
var rememberme = fields.rememberme;
// console.log(rememberme); // 查询数据库。
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"php183"
});
// 连接。
con.connect();
// 执行查询。
con.query("SELECT * FROM users WHERE name='"+ name +"'", function(err, results, fields){
// console.log(results);
// res.send('ok'); if(results.length <= 0){
res.send('没有这个用户');
return ;
} // 判断密码。
if(results[0].password != password){
req.session.info = '密码错误!';
res.redirect('/admin/login');
}else { // 判断是否记住我。
if(rememberme == 'on')
{
console.log(111);
res.cookie('rememberme', 1, {maxAge: 600000, hostOnly:true});
} // 将用户数据存入 session
req.session.admin = results[0]; // 跳转后台主页
res.redirect('/admin/index');
}
}); con.end();
return ; }); // res.send('ok');
}); app.get("/admin/index", function(req, res){
// 判断 session
if(!req.session.admin)
{
res.redirect('/admin/login');
return ;
} res.render('admin-index', {session:req.session}); }); // 文章管理
app.get('/admin/article/add', function(req, res){
// res.send('add') res.render('admin-article-add');
});
app.post('/admin/article/insert', function(req, res){ // 实例化。
var form = new formidable.IncomingForm(); // 表单处理。
form.parse(req, function(error, fields, files){
// console.log(fields);
var title = fields.title;
var content = fields.content; // 查询数据库。
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"php183"
});
// 连接。
con.connect();
// 执行查询。
con.query("INSERT INTO articles(title,content) VALUES('"+ title +"','"+ content +"')", function(err, results, fields){
// console.log(results);
if(results.affectedRows > 0)
{
res.redirect('/admin/article/add');
return ;
}else{
res.redirect('/admin/article/add');
return ;
} }); con.end();
return ;
}); // res.send('insert')
});
app.get('/admin/article/edit/:id([0-9]+)', function(req, res){
// 获取 id
var id = req.params.id;
var p = req.query.p;
console.log(p);
// 查询数据库。
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"php183"
});
// 连接。
con.connect();
// 执行查询。
con.query("SELECT * FROM articles WHERE id="+ id, function(err, results, fields){
// console.log(results);
res.render('admin-article-edit', {data:results[0],p:p}); }); con.end();
return ; });
app.post('/admin/article/update', function(req, res){ // 接收
var p = req.query.p;
// 实例化。
var form = new formidable.IncomingForm(); // 表单处理。
form.parse(req, function(error, fields, files){
// console.log(fields);
var id = fields.id;
var title = fields.title;
var content = fields.content; // 查询数据库。
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"php183"
});
// 连接。
con.connect();
// 执行查询。
con.query("UPDATE articles SET title='"+ title +"',content='"+ content +"' WHERE id="+id, function(err, results, fields){
// console.log(results);
if(results.affectedRows > 0)
{
res.redirect('/admin/article/index/'+ p);
return ;
}else{
res.redirect('/admin/article/edit/'+ id);
return ;
} }); con.end();
return ;
}); // res.send('update');
});
app.get('/admin/article/delete/:id([0-9]+)', function(req, res){
var id = req.params.id;
var p = req.query.p; // 查询数据库。
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"php183"
});
// 连接。
con.connect();
// 执行查询。
con.query("DELETE FROM articles WHERE id="+id, function(err, results, fields){
// console.log(results);
if(results.affectedRows > 0)
{
res.redirect('/admin/article/index/'+ p);
return ;
}else{
res.redirect('/admin/article/edit/'+ id);
return ;
} }); con.end();
return ; });
app.get('/admin/article/index/:p([0-9]+)', function(req, res){ var p = req.params.p;
if(typeof(p) == 'undefined')
{
p = 1;
}
var num = 2;
var total = 0;
// 根据 p 处理需要的参数。
// 0,10
// 10,10
var start = (p-1)*num;
var end = num;
var limit = start + ',' + end; // 查询数据库。
var con = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"php183"
});
// 连接。
con.connect();
// 执行查询数据总条数。
con.query({sql: 'SELECT COUNT(*) AS count FROM articles', timeout: 60000}, function (error, results, fields) {
if (error && error.code === 'PROTOCOL_SEQUENCE_TIMEOUT') {
throw new Error('too long to count table rows!');
} if (error) {
throw error;
} total = results[0].count;
}); // 执行查询。
con.query("SELECT * FROM articles LIMIT "+ limit, function(err, results, fields){
// console.log(results);
// res.send('111'); res.render('admin-article-index', {data:results,total:total,num:num,p:p}); }); con.end();
return ; // res.send('index');
}); // 4. 监听。
app.listen(3000);
node.js代码的更多相关文章
- 我们为什么要看《超实用的Node.JS代码段》
		
不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1. ...
 - Edge.js:让.NET和Node.js代码比翼齐飞
		
通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...
 - 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因
		
<超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...
 - 8 行 Node.js 代码实现代理服务器
		
接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性.同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势.今天就来看看作 ...
 - 《超实用的Node.js代码段》连载二:正确拼接Buffer
		
对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出 ...
 - 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度
		
我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...
 - Visual Studio Code - 调试 Node.js 代码
		
官方的文档写的太好了!大家还是看参考资料吧. 参考资料: Debugging in Visual Studio Code Debug Node.js Apps using Visual Studio ...
 - 用 chrome 调试 node.js 代码
		
1.全局安装 node-inspector cnpm install -g node-inspector 2.启动node项目入口文件,如 node --inspect index.js 3.控制台 ...
 - 修改上一篇文章的node.js代码,支持调用自定义页面
		
上一篇文章所有请求只能调用index.html,现在做个改造,允许调用自定义页面 服务端 app.js var app = require('http').createServer(handler) ...
 - 修改上一篇文章的node.js代码,支持默认页及支持中文
		
服务端 app.js var app = require('http').createServer(handler) var io = require('socket.io')(app); var f ...
 
随机推荐
- mysql实现读写分离
			
MySQL读写分离概述 1.读写分离介绍 对于目前单机运行MySQL服务.会导致MySQL连接数过多.最终导致mysql的宕机.因此可以使用多台MySQL服务器一起承担压力.考虑到项目中读写比例的不一 ...
 - js 完美运动框架
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - python获取群成员信息
			
#coding: utf-8 import itchat,datetime from itchat.content import TEXT itchat.auto_login(hotReload=Tr ...
 - window 查看端口 杀端口
			
最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,终于有一天受不了了,想要想办法解决.刚开始从网上找了好多教程,发现不行.开始自己尝试,终于,成功的将占用端口的进程杀掉.在此记录下过程( ...
 - VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用和secureCUT乱码
			
错误:VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用 改正:找到虚拟机的位置找到下图灰色的部分:打开 .vmx后缀的操作系统配置文件,加入以下代码: cpuid.1.eax = :: 2. ...
 - Flutter 使用阿里巴巴icon库
			
在Flutter默认创建的项目中可以使用系统Material图标,在pubspec.yaml文件中使用图标设置如下: flutter: uses-material-design: true 系统图标如 ...
 - java 实现全排列
			
public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = n ...
 - MySQL笔记(9)-- 各种锁及实现
			
一.背景 MySQL有两种类型的锁:lock(锁)和latch(闩锁): 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务 临界资源 模式 行锁.表锁. ...
 - 关于Spring的常见面试题
			
1.Spring是什么? Spring是一个轻量级的IoC和AOP容器框架.是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求.常见的配置方 ...
 - JSOI 2016 病毒感染 辅助Dp问题
			
原题链接:https://www.luogu.com.cn/problem/P5774 分析 直接看这道题,第一个困惑点,那个绝对值的比较是什么东西,根据数学知识,我们可以知道这个意思是k到i的距离小 ...