路由: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. golang dlv 远程调试

    因为不知道delvel 是如何设置源码的,本地编译的上传到服务器上,服务器要调试看不到源码,很是忧伤,所以干脆使用远程调试吧: 在服务器上 ps x|grep game 查找到gameserver的进 ...

  2. Go 语言极速入门

    本系列文章主要是记录<Go 语言实战>和<Google 资深工程师深度讲解 Go 语言>的学习笔记. Go 语言极速入门1 - 环境搭建与最简姿势Go 语言极速入门2 - 基础 ...

  3. 毕加索发布轻量化转化引擎及BIMSOP协作云平台

    一直以来,杂务缠身,博客都好久没有更新了,以后还是要继续坚持总结一下.希望能有时间坚持下去 :) 月初在国家会议中的智能展会上,我分享了毕加索公司近来的工作,即自行研发的轻量化转化云平台,以及以此为基 ...

  4. Mybatis中使用集合、数组

    一.简述 本文讲Mybatis中如何将传入参数为数组或者集合对象,进行遍历,组合Where条件中如in条件等内容. 有3种情况: 如果传入的是单参数且参数类型是一个List的时候,collection ...

  5. CAP二十年:“规则”变了

    本文是原文https://www.cnblogs.com/cobbliu/p/7494961.html的译文,原链接:http://www.infoq.com/cn/articles/cap-twel ...

  6. 词向量可视化--[tensorflow , python]

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ ---------------------------------- ...

  7. (9) MySQL主主复制架构使用方法

    一. 回忆主从复制的一些缺点 上节说到主从复制的一些问题 我们再来回忆一下 主从复制,增加了一个数据库副本,从数据库和主数据库的数据最终会是一致的 之所以说是最终一致,因为mysql复制是异步的,正常 ...

  8. 【云计算】IaaS、PaaS和SaaS

    1. SaaS:Software-as-a-Service(软件即服务) 提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如浏览器.消费者不需要管理或 ...

  9. Filter需要配置多个url-pattern

    最近做项目遇到一个Filter需要配置多个url-pattern,上网查了下资料,经测试,现总结下 filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前. ...

  10. Centos7 Mysql5.7主从服务器配置

    在两台Linux机器上安装MySQL 一.Master主服务器配置1.编辑my.cnf(命令查找文件位置:find / -name my.cnf)vi /etc/mysql/my.cnf 在[mysq ...