8、路由 router

路由:router

用户功能

/user ----> index.html

/user/login ----> login.html

/user/reg ----> reg.html

/user userRouter => express.Router();

app.use("/user",userRouter);

新闻功能

/news ----> index.html
/news/edit ----> edit.html
/news/add ----> add.html
router.js

var express = require("express");
var app = express();
app.listen(9000);var userRouter = express.Router();
var newsRouter = express.Router();// /user  /newsapp.use("/user",userRouter);
app.use("/news",newsRouter);userRouter.get("/",function(req,res){res.send("user--->index.html"); 
});userRouter.get("/login",function(req,res){res.send("user--->login.html"); 
});userRouter.get("/reg",function(req,res){res.send("user--->reg.html");   
});newsRouter.get("/",function(req,res){res.send("news--->index.html"); 
});newsRouter.get("/edit",function(req,res){res.send("user--->edit.html");  
});newsRouter.get("/add",function(req,res){res.send("user--->add.html");   
});

express

Express 应用生成器

npm install express-generator -g

创建应用

express myapp -e

下载模块

cnpm i

启动服务:

npm start

node bin/www

npm run script名字


cnpm i -S cookie-session multer consolidate mysql


连接池:

mysql.createConnection({})
mysql.createPool({
connectionLimit:10默认是10条
})


app.js:
var createError = require("http-errors");
var logger = require("morgan");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var cookieSession = require("cookie-session");
var consolidate = require("consolidate");
var multer = require("multer");var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");var app = express();//文件上传
var multerMiddleware = multer({dest:"upload"}).any();
app.use(multerMiddleware);// 模板引擎
app.set("view engine", "html");
app.set("views", "views");
app.engine("html", consolidate.ejs);//日志
app.use(logger("dev"));//处理post数据
app.use(express.json());
app.use(express.urlencoded({ extended: false }));//cookie-session
app.use(cookieParser());var keys = [];
for(var i = 0; i < 10000; i  ){keys.push("sessionid" Math.random());
}app.use(cookieSession({name:"sid",keys,maxAge:30*60*1000 //ms
}));//静态服务器
app.use(express.static("public"));app.use("/", indexRouter);
app.use("/users", usersRouter);// catch 404 and forward to error handler
app.use(function(req, res, next) {next(createError(404));
});// error handler
app.use(function(err, req, res, next) {// set locals, only providing error in developmentres.locals.message = err.message;res.locals.error = req.app.get("env") === "development" ? err : {};// render the error pageres.status(err.status || 500);res.render("error");
});module.exports = app;
users.js:
var express = require("express");
var pool = require("../utils/pool");
var md5 = require("../utils/md5");var router = express.Router();var pageSize = 10;/* /users ---> index.html */
router.get("/", function(req, res) {if(!req.session.isLogin){res.redirect("/users/login");}var pageNo = req.query.pageNo || 1;//总页数var totalSql = "select count(*) as count from user_table";pool.query(totalSql,function(err,data){console.log(data);if(data.length == 0){//没有数据res.render("./users/index.html",{pageCount:0});} else {//有数据var count  = data[0].count;var pageCount = Math.ceil(count/pageSize);//做分页var beginIndex = (pageNo-1)*pageSize;var querySql = `select * from user_table limit ${beginIndex},${pageSize}`;console.log(1111,querySql);pool.query(querySql,function(err,data){console.log(111,data,pageCount);res.render("./users/index.html",{data,pageCount,pageNo});});}});
});//渲染页面
router.get("/login", function(req, res) {res.render("./users/login2",{error:1,msg:""});
});//处理接口
router.post("/login", function(req, res) {var {user,pass} = req.body;pass = md5(pass);var sql = `select * from user_table where username="${user}" and password="${pass}"`;pool.query(sql,function(err,data){if(data.length == 0){//用户名或者密码错误//res.send({error:0,msg:"用户名或者密码错误"});res.render("./users/login2",{error:0,msg:"用户名或者密码错误"});} else {//res.send({error:1,msg:"登陆成功"});req.session.isLogin = true;res.redirect("/");}   });
});router.get("/reg", function(req, res) {res.render("./users/reg");
});
//处理接口
router.post("/reg", function(req, res) {var {user,pass} = req.body;pass = md5(pass);var querySql = `select * from user_table where username="${user}"`;pool.query(querySql,function(err,data){if(data.length == 0){//用户不存在 可以注册var inserSql = `insert into user_table(username,password) values("${user}","${pass}")`pool.query(inserSql,function(err){res.send({error:1,msg:"注册成功"}); });} else {//用户已经存在res.send({error:0,msg:"用户已存在"});}   }); 
});module.exports = router;

SSR

分页:

select * from user_table; 查询所有

每页显示10条数据 pageSize = 10;

select * from user_table limit beginIndex,pageSize;

select * from user_table limit 1,10;

页数pageNo      beginIndex1            0  - 92           10 - 193           20 - 29

beginIndex = (pageNo-1)*pageSize

pageCount总页数 = Math.ceil(总数据/每页显示多少条) = Math.ceil(count/pageSize)

count? ===> select count(*) as count from user_table;


get  --- req.query   /url?name=value  ----> /url?name=aaareq.params  /url/:name       ----> /url/aaapost --- req.body


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器装虚拟化平台,vmware服务器虚拟化方案(vmware虚拟化平台部署)

服务器虚拟化平台方案主要的有三种&#xff0c;特点分别如下&#xff1a;1、思杰Citrix XenServer :XenCenter是Citrix的虚拟化图形接口管理工具&#xff0c;可在同一界面&#xff0c;管理多台的XenServer服务。以前见过一台服务器安装虚拟服务器&#xff0c;然后可以装N个系统…

一个逐步“优化”的范例程序(转)

reference URL&#xff1a;http://www.tracefact.net/Software-Design/A-Sample-Design.aspx本文是《Object-Oriented Analysis and Design》一书第一章和第五章的读书笔记。我对书中提供的一个范例程序进行了总结和整理&#xff0c;通过逐步优化这个乐器管理的范例程序&#x…

Java SE 8新特性导览:使用Lambda Expression进行函数式编程

“ Java SE 8新功能浏览 ”系列的这篇文章将深入了解Lambda表达式 。 我将向您展示Lambda表达式的几种不同用法。 它们都具有功能接口的共同实现。 我将解释编译器如何从代码中推断信息&#xff0c;例如特定类型的变量以及后台实际发生的情况。 在上一篇文章“ Java SE 8新功能…

JS 数据转换

转换成字符串类型 toString() var num 5;console.log(num.toString()); String() String()函数存在的意义&#xff1a;有些值没有toString()&#xff0c;这个时候可以使用String()。比如&#xff1a;undefined和null 拼接字符串方式 num ""&#xff0c;当 两边一…

凭借K2 SmartObject框架,在SharePoint中集成数据

随着SharePoint 2013的发布&#xff0c;Microsoft已提供Business Connectivity Services&#xff08;BCS&#xff09;增强功能以及外部列表功能&#xff0c;确保您可以更简单地在SharePoint环境下从外部数据源提取数据。针对诸如服务台票务应用或销售仪表盘等实施解决方案&…

浙大计算机专硕培养方案,浙江大学硕士研究生培养方案

《浙江大学硕士研究生培养方案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《浙江大学硕士研究生培养方案(3页珍藏版)》请在人人文库网上搜索。1、浙江大学硕士研究生培养方案医 学院 肿瘤学 专业(代码&#xff1a; 100214 )(一级学科&#xff1a; 临床医学 )一、培…

停止尝试使用内部DB框架模拟SQL OFFSET分页!

我敢肯定&#xff0c;到目前为止&#xff0c;您已经以多种方式弄错了。 而且您可能很快将无法正确处理。 那么&#xff0c;当您可以实施业务逻辑时&#xff0c;为什么还要在SQL调整上浪费您的宝贵时间呢&#xff1f; 让我解释… 直到最近的SQL&#xff1a;2008标准 &#xff0…

leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses

20. Valid Parentheses 错误解法&#xff1a; "[])"就会报错&#xff0c;没考虑到出现)、]、}时&#xff0c;stack为空的情况&#xff0c;这种情况也无法匹配 class Solution { public:bool isValid(string s) {if(s.empty())return false;stack<char> st;st.…

和朱晔一起复习Java并发(五):并发容器和同步器

和朱晔一起复习Java并发&#xff08;五&#xff09;&#xff1a;并发容器和同步器 本节我们先会来复习一下java.util.concurrent下面的一些并发容器&#xff0c;然后再会来简单看一下各种同步器。 ConcurrentHashMap和ConcurrentSkipListMap的性能 首先&#xff0c;我们来测试一…

树莓派3显示服务器SSH拒绝了密码,脚本封杀尝试树莓派SSH密码的来源IP

树莓派整天开着&#xff0c;如果用缺省SSH端口对外开放&#xff0c;就会经常遇到扫描SSH密码的肉鸡。虽然密码不是很简单&#xff0c;但还是感觉很不安全的。系统的ssh登录日志文件在&#xff1a;/var/log/auth.log&#xff0c;登录失败时会记录以下格式的日志&#xff1a;Mar …

6-1 数组函数练习

1、引用 /* var num 10;function show(num){num ;alert(num);}alert(num); //10show(num); //11 num numalert(num); //10*//*引用*//*var arr [1, 2, 3, 4];function show(arr){arr.push("hello");alert(arr);}alert(arr); //[1, 2, 3, 4]show(arr)…

整理任务

昨晚帮师姐整理测试&#xff0c;没有时间写日志&#xff0c;今天一大早补上。 十一长假之后的第一个工作日&#xff0c;老师回来了。详细汇报了整个假期的学习之后&#xff0c;老师整理了以后我的学习任务。本来觉得没多少事情&#xff0c;可是细数了一下&#xff0c;竟然光论文…

Hive:使用Apache Hive查询客户最喜欢的搜索查询和产品视图计数

这篇文章涵盖了使用Apache Hive查询存储在Hadoop下的搜索点击数据。 我们将以示例的方式生成有关总产品浏览量的客户排名靠前的搜索查询和统计信息。 继续之前的文章 使用大数据分析客户产品搜索点击次数 &#xff0c; Flume&#xff1a;使用Apache Flume收集客户产品搜索点…

expdp错误案例

转自:https://www.cnblogs.com/kerrycode/p/3960328.html Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例&#xff0c;下面总结一些自己使用数据泵(Data Dump)过程当中遇到的问题以及解决方法。都是在使用过程中遇到的问题&#xff0c;以后陆续遇到数据…

HashSet源码分析:JDK源码系列

1.简介 继续分析源码&#xff0c;上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。 HashSet是一个无重复元素集合&#xff0c;内部使用HashMap实现&#xff0c;所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用空的元素。 HashSet是…

修改左侧导航显示样式(转载自Sunmoonfire's artistic matrix)

这是一片非常好的文章&#xff0c;修改下CSS就可以改变左侧导航栏的样式&#xff0c;在网上找了一些都是要写代码的。怕连接失效&#xff0c;所以直接将文章考了过来&#xff0c;希望作者原谅&#xff0c;如有不妥&#xff0c;请通知一声&#xff0c;我会将文章删掉&#xff01…

tf.argmax()以及axis

tf.argmax()表示返回最大值的索引号&#xff0c;axis为0 &#xff0c;表示返回每列最大值索引号。axis为1 &#xff0c;表示返回每行最大值索引号 结果为 转载于:https://www.cnblogs.com/san333/p/10507402.html

jquery ajax 上传文件 demo,Jquery+AJAX上传文件,无刷新上传并重命名文件

index.htmlAjax上传图片Ajax上传图片function upload(){var form new FormData(document.getElementById("form"));$.ajax({url:"upload.php",type:"post",data:form,cache: false,processData: false,contentType: false,success:function(dat…

Meet Fabric8:基于Camel和ActiveMQ的开源集成平台

面料8 Fabric8是Red Hat的JBoss Fuse产品的Apache 2.0许可上游社区。 这是一个基于Apache ActiveMQ &#xff0c; Camel &#xff0c; CXF &#xff0c; Karaf &#xff0c; HawtIO等的集成平台。 它提供了自动化的配置和部署管理&#xff0c;以帮助使部署变得容易&#xff0…

Django之web框架的本质

web框架的本质及自定义web框架 我们可以这样理解&#xff1a;所有的Web应用本质上就是一个socket服务端&#xff0c;而用户的浏览器就是一个socket客户端&#xff0c;基于请求做出响应&#xff0c;客户都先请求&#xff0c;服务端做出对应的响应&#xff0c;按照http协议的请求…