diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/config/db.js" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/config/db.js"
new file mode 100644
index 0000000000000000000000000000000000000000..e1b143475ee09e95e6de0637d7af3fac6d05c55e
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/config/db.js"
@@ -0,0 +1,18 @@
+let dbconfig = {
+
+ host: '127.0.0.1',
+ user: 'root',
+ password: '123456',
+ database: 'yiqing',
+ port: '3306'
+
+}
+module.exports = dbconfig;
+
+//dbconfig.key();
+
+// json 非常重要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+// 其实它很单纯,看到 { 开头 }结尾就是json ,它是 key val 形式 ,key 就是 类型数组的键名,value 是对应的值
+
+// value 不限定类型
\ No newline at end of file
diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/BaseController.js" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/BaseController.js"
new file mode 100644
index 0000000000000000000000000000000000000000..8de37bf0145969fe34ea9e0d134f592e72822704
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/BaseController.js"
@@ -0,0 +1,17 @@
+class BaseController {
+
+ constructor(req,res,nunjucks){
+
+ this.req = req;
+ this.res = res;
+ this.nunjucks = nunjucks;
+ this.nunjucks.configure('./home/html', { autoescape: true });//配置模板的目录
+
+ }
+
+ display(path,data){
+ return this.nunjucks.render(path,data);
+ }
+}
+
+module.exports = BaseController;
\ No newline at end of file
diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/UserController.js" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/UserController.js"
new file mode 100644
index 0000000000000000000000000000000000000000..85afc03bb61e95f7614a2031d5cea4020d0f0456
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/UserController.js"
@@ -0,0 +1,66 @@
+const BaseController = require("./BaseController");
+
+const UserModel = require("../../model/UserModel");
+const EncAndDec = require("../../untis/EecAndDec");
+
+
+class UserController extends BaseController {
+
+ async login() {
+ if(this.req.session){//表示已经登录
+ let userInfo = JSON.parse(this.req.session);
+ return '301'
+ }else{
+ return this.display("login.html");
+ }
+
+ }
+
+ /**
+ * 前台用户注册页面
+ * @returns
+ */
+ async userReg(){
+
+ return this.display("userReg.html");
+ }
+
+ /**
+ *
+ * @returns 用户注册后端逻辑
+ */
+ async handleReg(){
+ //又没判断用户是否为空? 也没有判断,密码是否为空
+ let name = this.req.post['name'];
+ let password =this.req.post['password']; //EncAndDec.md5(this.req.post['password']);
+ let sql = "select * from user where name=? and password=? limit 1";
+ let userModel = new UserModel();
+ let userList=await userModel.query(sql,[name,password]);
+ //console.log(userList); 数组转成 json的字符串,反过来怎么处理
+ //写入到数据库 你们完善 TODO
+ //JSON.parse 把字符串还原成数组或者 json格式
+ let userInfo={};
+ if(userList.length>0){//长度大于0 说明查询到数据了,说明用户密码都是正确的
+ userInfo = userList[0];
+ this.res.session = JSON.stringify(userInfo);
+ }
+ return JSON.stringify(userInfo);
+ }
+
+ async userList(){
+
+ let user = new UserModel();
+
+ try{
+ let userList = await user.select();
+ return '我是用户列表页面'//就是把对象转成json格式
+
+ }catch(err){
+ console.log(err);
+ }
+
+
+ }
+
+}
+module.exports = UserController;
\ No newline at end of file
diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/index.js" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/index.js"
new file mode 100644
index 0000000000000000000000000000000000000000..b4b7fcc557e5ac3a018ca8a17c34e6e4556364b3
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/index.js"
@@ -0,0 +1,78 @@
+/**
+ * 在mvc 中,controller 是指挥者者,他指挥着数据获取与模板的渲染
+ *
+ */
+let fs = require("fs");
+let index={
+
+
+ index:async function(req,res){
+ let mysql = require("../../model/base");
+ let date = req.query['date'];
+ //console.log('date-----'+date);
+ let sql = 'select * from number where date=?';
+ //console.log(res);
+ let result= await mysql.query(sql,date,res);//等待数据的返回,但是线程可以干别的事情,线程我们就理解为饭店的服务员,
+ //node只能请得起一个服务员, await + promise 表示,这一段代码需要同步(服务员招待了客户,
+ //客户告诉服务器,我自己来,你忙别的) 如果说这块是阻塞的,那请求2次,5*2 =10
+ //如果不是阻塞的
+
+ console.log(result);
+ let html='';
+ for (let val in result) {
+ html += '
'
+ html += '| ' + result[val].city + " | "
+ html += '' + result[val].nums + " | "
+ html += '
'
+
+ }
+
+ fs.readFile("./home/html/index.html", function (err, data) {
+ console.log(err);
+ let datas = data.toString();
+ let formatHtml = datas.replace("{{result}}", html);
+ res.write(formatHtml);
+ res.end();
+
+ })
+
+
+ },
+
+ show: async function(req,res){
+
+ let mysql = require("../../model/base");
+ let date = req.query['date'];
+ //console.log('date-----'+date);
+ let sql = 'select * from number order by id desc limit 1 ';//取出最先的一条数据
+ //console.log(res);
+ let result= await mysql.query(sql,date,res);//等待数据的返回,但是线程可以干别的事情,线程我们就理解为饭店的服务员,
+ //node只能请得起一个服务员, await + promise 表示,这一段代码需要同步(服务员招待了客户,
+ //客户告诉服务器,我自己来,你忙别的) 如果说这块是阻塞的,那请求2次,5*2 =10
+ //如果不是阻塞的
+
+ console.log(result);
+ let html='';
+ for (let val in result) {
+ html += ''
+ html += '| ' + result[val].city + " | "
+ html += '' + result[val].nums + " | "
+ html += '
'
+
+ }
+
+ fs.readFile("./home/html/index.html", function (err, data) {
+ console.log(err);
+ let datas = data.toString();
+ let formatHtml = datas.replace("{{result}}", html);
+ res.write(formatHtml);
+ res.end();
+
+ })
+
+
+ }
+}
+
+module.exports=index;
+
diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/indexController.js" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/indexController.js"
new file mode 100644
index 0000000000000000000000000000000000000000..57d9af51225f4934757ba33f17176b678f6958aa
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/controller/indexController.js"
@@ -0,0 +1,119 @@
+const BaseController = require("./BaseController");
+let mysql = require("../../model/Base");
+
+class IndexController extends BaseController {
+
+
+ async index() {
+
+ let mysqlObj = new mysql();
+ let date = this.req.query['date'];
+ //console.log('date-----'+date);
+ let sql = 'select * from number where date=?';
+ //console.log(res);
+ try {
+ let result = await mysqlObj.query(sql, date);//等待数据的返回,但是线程可以干别的事情,线程我们就理解为饭店的服务员,
+ //node只能请得起一个服务员, await + promise 表示,这一段代码需要同步(服务员招待了客户,
+ //客户告诉服务器,我自己来,你忙别的) 如果说这块是阻塞的,那请求2次,5*2 =10
+ //如果不是阻塞的
+ //result 是啥类型?数组
+ return this.display('index.html', { data: result,title:'我是index11111111' })
+ } catch (err) {
+ console.log(err);
+ }
+
+ }
+
+ async detail() {
+
+ let mysqlObj = new mysql();
+ let date = this.req.query['date'];
+ //console.log('date-----'+date);
+ let sql = 'select * from number where date=?';
+ //console.log(res);
+ try {
+ let result = await mysqlObj.query(sql, date);//等待数据的返回,但是线程可以干别的事情,线程我们就理解为饭店的服务员,
+ //node只能请得起一个服务员, await + promise 表示,这一段代码需要同步(服务员招待了客户,
+ //客户告诉服务器,我自己来,你忙别的) 如果说这块是阻塞的,那请求2次,5*2 =10
+ //如果不是阻塞的
+ //result 是啥类型?数组
+ return this.display('detail.html', { data: result })
+ } catch (err) {
+ console.log(err);
+ }
+
+ }
+
+
+ diji() {
+
+ console.log("盖地基");
+
+ }
+
+ zhuzi() {
+
+ console.log("盖柱子");
+
+ }
+
+ qizhuang() {
+
+ console.log("砌砖");
+
+ }
+
+ quchunishuijiang() {
+ console.log(this.nishuijiang);
+
+ }
+
+
+
+}
+module.exports = IndexController;
+
+// let obj = new IndexController('李四');//开始去搭积木,比方说我想搭建个小房子 ,new 就表示 具体要做个工程了
+// // 类是不限制构建次数
+// obj.diji();
+// obj.zhuzi();
+// obj.qizhuang();
+// obj.quchunishuijiang();
+
+// let obj2 = new IndexController('张三');//我们每次项目对象正常我们目的是不一样的
+// //this就表示每次构建的这个对象
+// obj2.quchunishuijiang();
+
+// console.log(obj==obj2)
+
+
+/**
+ * 回顾 class java es6
+ *
+ * 面向对象编程三大特点:继承,封装,多态(方法的重写)
+ *
+ * 封装:
+ * 继承:extends 需要继承
+ *
+ *
+ *
+ *
+ * class 中文翻译过来 班级 在编程里面叫 类,我们就按班级理解
+ *
+ * 班级里有很多成员,单元可以有一个,元素 在js 里面就是 函数(js class 里面不写function 就是函数名与 {} ,
+ *
+ * 在class 里面就不叫函数了,就叫 方法),和属性()
+ *
+ * class 的使用 , new 加一个class 名称,我们可以理解为, class 就是一堆的积木,里面有 圆柱体,有长方体.....(就是方法),但是我们积木
+ *
+ * 没有构建成具体的建筑.
+ *
+ *
+ * class :元素
+ * 1 函数,不用function 去标识,而且在类里面不叫函数了,叫方法
+ * 2 属性 就理解成变量,跟普通变量相对多个 this
+ *
+ *
+ *
+ */
+
diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/html/detail.html" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/html/detail.html"
new file mode 100644
index 0000000000000000000000000000000000000000..f6fbfa950367b48ccdd8dcc5e64b93c866cd2c53
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/html/detail.html"
@@ -0,0 +1,9 @@
+{% include='header.html' %}
+ 各城市疫情
+ {% for item in data %}
+
+ | {{ item.city }} |
+ {{ item.nums }} |
+
+ {% endfor %}
+{% include='footer.html' %}
\ No newline at end of file
diff --git "a/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/html/footer.html" "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/html/footer.html"
new file mode 100644
index 0000000000000000000000000000000000000000..d619210ac5cfa2dd8f909c0a035f7a6128f9c6b0
--- /dev/null
+++ "b/\346\235\250\346\264\213/2022.03.24 cookie\344\270\216session\347\232\204\345\272\224\347\224\250/home/html/footer.html"
@@ -0,0 +1,5 @@
+
+