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 ...
随机推荐
- 《前端之路》 - 初试 TypeScript(一)基础数据类型
一.先讲讲 TypeScript 什么是 typeScript ? typeScript 是 Javascript 的超集 我们用一张图来简单介绍下 ts 和 js 清清楚楚明明白白的关系- 为什么会 ...
- SyntaxError: unexpected character after line continuation character
SyntaxError: unexpected character after line continuation character 待解决问题:在运行.py文件时报错SyntaxError: un ...
- c# 导出excel的两种常见方法
1,不是用第三方插件(html直接输出) StringBuilder ssb = new StringBuilder(); StringBuilder sb = new StringBuilder() ...
- annaconda的安装及使用
一.安装 1.安装包下载: 方式1:官网:https://www.anaconda.com/distribution/ 方式2:清华镜像源:https://mirrors.tuna.tsinghua. ...
- ijkplayer中遇到的问题汇总
在做音频播放的时候,很多公司使用的是开源的ijkplayer播放器,ijkplayer底层是基于ffmpeg,在某机型上面可能常常遇到各种问题.今天整理了大家在使用ijkplayer中遇到的问题,以及 ...
- Unity 游戏框架搭建 2019 (八) 关于导出 UnityPackage 功能的小结
导出 UnityPackage 功能到这里要告一段落了,相信认真看的童鞋都有收获.笔者在写教程之前纠结了很久.到底是先给出一坨工具代码,然后再逐个讲解比较好,还是一篇一个知识点比较好.后来想通了.工具 ...
- 108. Convert Sorted Array to Binary Search [Python]
108. Convert Sorted Array to Binary Search Given an array where elements are sorted in ascending ord ...
- 微信小程序开发-小程序之间的跳转
前几天开发微信小程序,其中有个需要联动宣传的业务,就是正在开发的小程序跳转到别的小程序去, 然后去看了下大家的做法与看法,总结下这小程序跳转之间应该注意到的几个问题 首先是跳转的方法, https:/ ...
- Django实现简单的用户添加、删除、修改等功能
一. Django必要的知识点补充 1. templates和static文件夹及其配置 1.1 templates文件夹 所有的HTML文件默认都放在templates文件夹下. 1.2 stati ...
- 3.Scikit-Learn实现完整的机器学习项目
1 完整的机器学习项目 完成项目的步骤: (1) 项目概述 (2) 获取数据 (3) 发现并可视化数据,发现规律. (4) 为机器学习算法准备数据. (5) ...