路由: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 /news app.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


连接池:

utils/pool.js

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 development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {}; // render the error page
res.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      beginIndex
1 0 - 9
2 10 - 19
3 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=aaa
req.params /url/:name ----> /url/aaa post --- req.body

8、路由 router的更多相关文章

  1. Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现

    前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...

  2. vue-router同路由$router.push不跳转一个简单解决方案

    vue-router同路由$router.push不跳转一个简单解决方案 vue-router跳转一般是这么写: toCurrentPage: function(thisId){ this.$rout ...

  3. vue项目创建步骤 和 路由router知识点

    菜单快捷导航: vue项目创建 vue路由router知识点(路径参数.查询参数.命名路由.嵌套路由.命名视图.hash/history模式) 1.创建一个vue项目步骤 (windows环境下).创 ...

  4. Vue学习笔记-Vue.js-2.X 学习(七)===>脚手架Vue-CLI(路由Router)

    脚手架Vue-CLI(路由Router) 一 按装(通过新创建脚手架按装),如果在原来的脚手架上按装直接进图型化界面vue ui的插件按装. 二 使用(上面按装下面步骤自动会生成) 第一步:导入路由对 ...

  5. 前端 JS 原生 javascript 和 location.hash 实现一个单页应用的路由 router

    开篇日常立个flag-- 前言 最近在做一些应用,类似于单页应用,想实现类似于 Vue 路由的效果. 但是个人 Vue 基础四舍五入约等于无,而且看着 Vue-router 吃力+用不起来(因为我的项 ...

  6. VUE-008-通过路由 router.push 传递 query 参数(路由 path 识别,请求链接显示参数传递)

    在前端页面表单列表修改时,经常需要在页面切换的时候,传递需要修改的表单内容,通常可通过路由进行表单参数的传递. 首先,配置页面跳转路由.在 router/index.js 中配置相应的页面跳转路由,如 ...

  7. VUE-007-通过路由 router.push 传递 query 参数(路由 name 识别,请求链接显示参数传递)

    在前端页面表单列表修改时,经常需要在页面切换的时候,传递需要修改的表单内容,通常可通过路由进行表单参数的传递. 首先,配置页面跳转路由.在 router/index.js 中配置相应的页面跳转路由,如 ...

  8. VUE-006-通过路由 router.push 传递 params 参数(路由 name 识别,请求链接不显示)

    在前端页面表单列表修改时,经常需要在页面切换的时候,传递需要修改的表单内容,通常可通过路由进行表单参数的传递. 首先,配置页面跳转路由.在 router/index.js 中配置相应的页面跳转路由,如 ...

  9. Angular4中路由Router类的跳转navigate

    最近一直在学习angular4,它确实比以前有了很大的变化和改进,好多地方也不是那么容易就能理解,好在官方的文档和例子是中文,对英文不太好的还是有很大帮助去学习. 官方地址:https://angul ...

随机推荐

  1. 尝试新的构造系统 Ninja

    Ninja 是 Chrome 项目的构建工具,用来替换经典工具 make,目前这个开源工具已经被很多其它项目采用.据项目作者描述,创建这个新的构建工具,主要是为了提升大型项目的编译速度. 由于 Nin ...

  2. 一步步教你轻松学主成分分析PCA降维算法

    一步步教你轻松学主成分分析PCA降维算法 (白宁超 2018年10月22日10:14:18) 摘要:主成分分析(英语:Principal components analysis,PCA)是一种分析.简 ...

  3. Delphi提取PDF文本

    生成PDF的控件很多,但解析的不是太多,pdf Toolkit可以,但测试的第一个复杂的pdf就报告错误,并且汉字乱码,可能使用的版本或使用方法不对. 想起之前使用java调用的Apache名下的pd ...

  4. 二叉树遍历-c实现

    这里主要是三种遍历,先序(preorder,NLR),中序(Inorder,LNR),后序(Postorder,LRN) N:node,L:left,R:right 基本排序:先序(NLR,节点,左, ...

  5. mac安装MySQL-Python报错

    报错内容主要是: EnvironmentError: mysql_config not found Command "python setup.py egg_info" faile ...

  6. 【Java】类加载过程

    JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成JVM可以直接使用的Java类型的过程. 类加载的过程主要分为三个部分: 加载 链接 初始化 而链接又可以细分为三个小部分: ...

  7. ShiftRows方法简介

    ShiftRows 是HSSFSheet工作薄的方法 ShiftRows(int startRow,int endRow,int n)参数介绍:startRow:开始行endRow:末尾行n:移动n行 ...

  8. 【iCore4 双核心板_ARM】例程二十七:LWIP_NETIO实验——以太网测速

    实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.in ...

  9. java 爬取 国税局 省市区级联关系

    爬取网址 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html 因为数据比较大,存储为一个json,会内存溢出. 所以按照每 ...

  10. 12 Best Live Chat Software for Small Business Compared (2019) 最佳的wordpress在线聊天工具推荐插件 来帮你和潜在客户互动

    12 Best Live Chat Software for Small Business Compared (2019)     Did you know that more than 67% of ...