路由: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

8、路由 router相关推荐

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

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

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

    菜单快捷导航: vue项目创建 vue路由router知识点(路径参数.查询参数.命名路由.嵌套路由.命名视图.hash/history模式) vue导航守卫(全局守卫.单个路由独享.组件级守卫) 1 ...

  3. drf-路由组件:自动生成Routers路由、 使用方法、视图集中附加action的声明、自动生成路由router的两种方式的URL区别

    目录 一. 自动生成Routers路由 二. 使用方法 1) 创建router对象,并注册视图集,例如 2)添加路由数据 三. 代码演示 四. 视图集中附加action的声明 五. 自动生成路由rou ...

  4. vue路由router的props配置

    vue路由router的props配置 前置知识:vue-router3路由配置和使用,适配vue2,vue-router代码模版 路由props配置的作用:让路由组件更方便的接收到参数 ⚠️ 当不使 ...

  5. DRF中的路由Router使用

    DRF中的路由Router使用 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由列表信息. REST fra ...

  6. (全栈旅行足迹地图打卡网站 0-1)-前端路由(Router)-05(WebGIS Vue-js-go-mysql)

    上一节<el-main> <router-view/></el-main>对于侧边栏(Sidebar)组件运用到了Router相关知识,对于初学者或者不是很明白这部 ...

  7. Vue学习之路由(Router)

    Vue学习之 路由(Router) 文章目录 Vue学习之 路由(Router) 一.路由是什么? 二.Vue Router的安装 1.直接下载/CDN 2.NPM安装 三.路由的基础使用 1.定义路 ...

  8. 后端——egg.js是什么、egg.js安装、约定规则、路由Router、控制器Controller、跨域

    目录 一.egg.js是什么 二.egg安装 三.约定规则 四.路由Router 五.控制器Controller 六.跨域 1.egg-cors 1.下载 2.开启插件 3.配置插件 4.使用: 2. ...

  9. 25、react 中使用路由 router 详解

    react 中使用路由 router 详解 今天开始最新的一个模块,也是 react 开发中最重要的一部分,就是路由. SPA 理解 我们使用原生的 HTML + CSS + JavaScript 开 ...

最新文章

  1. 点击展开 表格_Excel里面如何设置默认的表格和透视表样式
  2. MVC3学习:将excel文件导入到sql server数据库
  3. Linux下服务器端开发流程及相关工具介绍(C++)
  4. 07、08 条件渲染、列表渲染
  5. 基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (番外篇)
  6. java 双向链表_23张图!万字详解「链表」,从小白到大佬
  7. 浙大计算机基础知识题1,浙大作业1计算机基础知识题.docx
  8. 库克:5G iPhone目前还不是我们考虑的问题
  9. leetcode力扣94. 二叉树的中序遍历
  10. java web 许令波_Java Web——Web概述
  11. js中多行字符串拼接
  12. 如何进行软件需求分析
  13. Dotnet WebAPI 项目启动提示 500.30 - ANCM In-Process Start Failure
  14. vue中使用clipboard实现点击复制功能
  15. Android 如何让你的App分享给别人
  16. 【技术文档】centernet(姿态估计)
  17. python爬虫(网页解析)
  18. idea 怎么导入war包,idea怎么打开war包,idea怎么导出一个war包
  19. 【文件夹访问被拒绝】删文件夹的时候遇到“你需要权限来执行此操作 你需要来自 我的本\Administrator 的权限才能对此文件夹进行更改”
  20. USDTPAY支付通道全行业可接入,安全稳定无痕快捷

热门文章

  1. Java面向对象(17)--类代码块
  2. mysql隔离级别验证_MySQL事务隔离级别以及验证
  3. cpta 好像有漏洞
  4. 5.报错:ImportError: No module named win32api
  5. spring3: Aspectj后置返回通知
  6. Python 连接MongoDB并比较两个字符串相似度的简单示例
  7. MVC5 + EF6 + Bootstrap3
  8. 项目管理控件Project Management Library
  9. python空格怎么加密_使用Python的RSA加密
  10. mysql安装模块解释_MySQL的模块不能安装的解决方法_MySQL