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

最新文章

  1. Eclipse中安装配置Tomcat
  2. [ActionScript 3.0] 获取随机颜色
  3. 单片机TM4C123学习(七):I2C模块(温度传感器)
  4. POJ 1661 Help Jimmy (dijkstra,最短路)
  5. shell变量自增的几种方式
  6. .xlsx文件总是默认用2007 Microsoft Office component 打开,且无法更改用EXCEL打开的解决方法
  7. pip升级
  8. SQL Server索引的作用
  9. windows配置Java环境变量
  10. zoj 1002 Fire Net 碉堡的最大数量【DFS】
  11. [CSAcademy]Virus on a Tree
  12. linux系统下Nagios+rrdtool+Pnp4nagios监控环境的搭建
  13. MongoDB3.X单机及shading cluster集群的权限管理(基于3.4.5)
  14. Java编程的逻辑 (50) - 剖析EnumMap
  15. linux下安装jre运行环境
  16. zabbix修改中文乱码
  17. asp.net简述WP开发模式
  18. php 删除目录
  19. 【BZOJ】1486 [HNOI2009]最小圈
  20. servlet 的控制缓存时间和response的重定向

热门文章

  1. Java并发编程(02):线程核心机制,基础概念扩展
  2. Java反射之数组的反射应用
  3. Pyppeteer入门(转载)
  4. django 和 七牛云 交互
  5. 小程序中内容审核功能的使用(后台使用thinkPHP5.1)
  6. 关于emgucv控制多摄像头问题
  7. 你不一定知道的UrlPrefix路由规则
  8. Cisco二层交换机命令
  9. hdu3368 dfs 下棋
  10. nim博弈 LightOJ - 1253