// 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代码的更多相关文章

  1. 我们为什么要看《超实用的Node.JS代码段》

    不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1.     ...

  2. Edge.js:让.NET和Node.js代码比翼齐飞

    通过Edge.js项目,你可以在一个进程中同时运行Node.js和.NET代码.在本文中,我将会论述这个项目背后的动机,并描述Edge.js提供的基本机制.随后将探讨一些Edge.js应用场景,它在这 ...

  3. 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因

    <超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...

  4. 8 行 Node.js 代码实现代理服务器

    接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性.同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势.今天就来看看作 ...

  5. 《超实用的Node.js代码段》连载二:正确拼接Buffer

    对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出 ...

  6. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  7. Visual Studio Code - 调试 Node.js 代码

    官方的文档写的太好了!大家还是看参考资料吧. 参考资料: Debugging in Visual Studio Code Debug Node.js Apps using Visual Studio ...

  8. 用 chrome 调试 node.js 代码

    1.全局安装 node-inspector  cnpm install -g node-inspector 2.启动node项目入口文件,如 node --inspect index.js 3.控制台 ...

  9. 修改上一篇文章的node.js代码,支持调用自定义页面

    上一篇文章所有请求只能调用index.html,现在做个改造,允许调用自定义页面 服务端 app.js var app = require('http').createServer(handler) ...

  10. 修改上一篇文章的node.js代码,支持默认页及支持中文

    服务端 app.js var app = require('http').createServer(handler) var io = require('socket.io')(app); var f ...

随机推荐

  1. Windows通过VNC连接并显示Linux桌面(Ubuntu16.04)

    目录 Linux中安装VNC服务 Linux中安装桌面环境 Windows中安装VNC Viewer Linux中安装VNC服务 sudo apt-get update sudo apt-get in ...

  2. chrome DevTools 里面 css样式里面 勾上 :hover 会将鼠标移上的效果一直保持,技巧:要在鼠标上的 div上 勾 :hover

    chrome DevTools 里面 css样式里面 勾上 :hover 会将鼠标移上的效果一直保持,技巧:要在鼠标上的 div上 勾 :hover

  3. java -输入年龄判断是否符合范围。

    //创建的一个包名. package demo3; //定义一个类. public class Test { //公共静态的主方法. public static void main(String[] ...

  4. weblogic-CVE-2020-2551-IIOP反序列化学习记录

    CORBA: 具体的对CORBA的介绍安全客这篇文章https://www.anquanke.com/post/id/199227说的很详细,但是完全记住是不可能的,我觉得读完它要弄清以下几个点: 1 ...

  5. 图解Java设计模式之模板模式

    图解Java设计模式之模板模式 豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式 ...

  6. ASP.NET动态网站课程设计——个人网页

    时光荏苒,岁月如梭,又是学期期末时,没错,我又来补课程设计了,hhh. 本文主要讲述如何在用H5+CSS3写的静态网站的基础上,结合ASP.NET动态网站开发,制作一个动态的个人网页. 首先需要熟悉一 ...

  7. Salesforce LWC学习(十四) Continuation进行异步callout获取数据

    本篇参考: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.apex_continua ...

  8. MySQL 教程--检视阅读

    MySQL 教程--检视阅读 准备:Windows 上安装 MySQL 教程地址,PHP语言基础 教程地址2 教程地址3,有讲数据库的备份和恢复 教程地址4,w3c.china,php基础,扩展阅读 ...

  9. [最短路,floyd] Codeforces 1202B You Are Given a Decimal String...

    题目:http://codeforces.com/contest/1202/problem/B B. You Are Given a Decimal String... time limit per ...

  10. java两数相乘基础算法

    下面是别人给我的代码: package com.bootdo; public class Test { public static void main(String[] args) { System. ...