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 ...
随机推荐
- C#委托和事件的简单实例
委托 C#里这个委托我的理解是可以看成是一个方法模板的类型.(不过并没有找到相关的理解 比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法 ...
- Mathtype快捷键&小技巧
Mathtype使用方便,能插入到Office等编辑器中,Latex公式在某些地方更加通用,如网页和书籍. 1. Mathtype简介 数学公式编辑器(MathType)是一款专业的数学公式编辑工具, ...
- Simulink仿真入门到精通(七) Simulink的回调函数
7.1 什么是回调函数 Callback functions(回调函数)是因某种操作而除法对其调用的函数,如按下按钮或双击操作等. 常用的Simulink回调函数可应用在以下场合: 打开Simulin ...
- 为Python安装pip
Python及操作系统的支持 Python 2.6, 2.7, 3.2, 3.3, 3.4 Unix/Linux, OS X, 以及 Windows 默认包含 Python 2.7.9 及以后的版 ...
- 如何在国内离线安装Chrome扩展并科学查资料
国内离线安装Chrome扩展 这些链接是从知乎国内离线安装 Chrome 扩展程序的方法总结 - 知乎看到的, 怕这个链接失效, 在这里自己备一份: Crx4Chrome - Download CRX ...
- 利用border-radius画椭圆
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- go例子(二) 使用go语言实现数独游戏
例子托管于github example.go package main import ( "./sudoku" ) func main() { //var smap ...
- 【2020-03-21】Dubbo本地环境搭建-实现服务注册和消费
前言 本周主题:加班工作.本周内忙于CRUD不能自拔,基本每天都是九点半下班,下周上线,明天还要加班推进进度.今天是休息日,于是重拾起了dubbo,打算近期深入了解一下其使用和原理.之所以说是重拾,是 ...
- Arch Linux开启SSH远程安装(1.5)
现在你的眼前应该可以看到[root@archiso~]#的提示. 首先,建立目标机器的网络设置: 安装和升级软件包前,先让本地的包数据库和远程的软件仓库同步是个好习惯. [root@archiso~] ...
- M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音
M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...