diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/.keep" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/ThinkNode.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/ThinkNode.js"
new file mode 100644
index 0000000000000000000000000000000000000000..8c781abdf963cfc986ae7753ed65d0efa737ee72
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/ThinkNode.js"
@@ -0,0 +1,195 @@
+let fs = require("fs");
+let nunjucks = require("nunjucks");
+let ArrayHelp = require("./untis/ArrayHelp");
+let dbCofig = require('./config/db');
+let mysql = require("mysql");
+let staticFileType = ['.ico', '.gif', '.png', '.jpg', '.css', '.js'];
+let ThinkNode = {
+
+ buildController: function () {
+ let connection = mysql.createConnection({ host: dbCofig.host, user: dbCofig.user, password: dbCofig.password, database: dbCofig.database, port: dbCofig.port })
+ connection.createConnection();
+ //查询所有的表
+ let tables = 'show tables'
+ connection.query(tables, function (err, result) {
+ if (err) {
+ console.log(err);
+ } else {
+
+
+ }
+
+ })
+
+
+ },
+ staticFileHandle: function (path, res) {
+ fs.readFile(path, function (err, data) {
+ if (err) {
+ console.log(err);
+ } else {
+ res.end(data);
+ }
+
+ })
+
+ },
+ findControllAndHandle: async function (req, res, funcsend) {
+ let url = req.url;
+ let isStatic = false;
+ //静态资源
+ staticFileType.forEach(element => {
+ if (url.lastIndexOf(element) > -1) {
+ isStatic = true;
+
+ let path = '.' +decodeURI(url);
+ ThinkNode.staticFileHandle(path, res);
+ }
+
+ });
+ if (isStatic == false) {
+ res.setHeader("Content-Type", "text/html; charset=utf-8");
+ let controllerAndAction = ArrayHelp.buildKeyAndVal(url.split("?")[1], '&', "=");
+ let front = controllerAndAction["f"] ? controllerAndAction["f"] : 'home';
+ let controller = controllerAndAction["c"] ? controllerAndAction["c"] : 'Index';
+ let action = controllerAndAction["a"] ? controllerAndAction["a"] : 'index';
+ let controllerPath = './' + front + '/controller/' + controller.replace(controller[0], controller[0].toUpperCase()) + "Controller.js";
+ fs.stat(controllerPath, async function (err, stats) {
+ if (err) {
+ console.log('控制器找不到,请确认url中c 对应的值得控制器是否存在!');
+ } else {
+ let classFile = require(controllerPath);
+ try {
+ let obj = new classFile(req, res, nunjucks);
+ if (obj.__proto__.hasOwnProperty(action)) {//判断该类中是否存在该方法
+ let content = await obj[action]();
+ //console.log('业务逻辑执行的结果'+content);
+ //前置中间件
+ var i = 0;
+ ThinkNode.next(funcsend, i, req, res, content);
+ res.write(content);
+ res.end();
+ return content;
+ } else {
+ return '
八戒你又调皮了,这个类中不存在' + action + '方法
';
+ }
+
+ } catch (err) {
+ console.log(err);
+ //报错结束请求响应
+ res.end();
+ }
+
+ }
+ })
+
+ }
+
+ },
+
+ next: function (funcs, i, req, res, content) {
+ if (isNaN(i)) return;
+ var task = funcs[i++]; // 取出函数数组里的下一个函数
+ if (!task) { // 如果函数不存在,return
+ return;
+ }
+ if (content) {
+ task(req, res, content, ThinkNode.next(funcs, i, req, res)); // 否则,执行下一个函数
+ } else {
+ task(req, res, ThinkNode.next(funcs, i, req, res)); // 否则,执行下一个函数
+ }
+ },
+
+ parseDataAndHanle: function (req, res, funcsend) {
+ let session=[];
+ let postData = '';
+ req.on('data', function (chunk) {//流方式读取数据,数据一段一段传输,这一段代码是异步的
+ postData += chunk;
+ });
+
+ req.on('end', async function () {
+ //解析提交数据
+ let data = ArrayHelp.buildKeyAndVal(postData, '', "=");
+ //把get和post数据都写入到query
+ req.query = data;
+ //如果是get方式把数据写入到 get 属性中
+ if (req.method == 'get') {
+ req.get = data;
+ }
+ //如果是post方式把数据写入到 post 属性中
+ if (req.method == 'post') {
+ req.post = data;
+ }
+ //解析cookie
+ req.cookie = ArrayHelp.buildKeyAndVal(req.headers.cookie, '; ', '=');
+ req.session=null;
+ node_session=null;
+ //如果没有 node_session 则设置一个
+ if (!req.cookie.node_session) {
+ node_session = new Date().getTime() + '_' + Math.random();
+ res.setHeader('Set-Cookie', "node_session=" + node_session);
+ // fs.exists('./session'),function(result){
+ // if(!result){
+ // fs.mkdir('./session',function(err){
+ // fs.writeFile('./session/'+node_session+'.txt',function(){
+ // ThinkNode.findControllAndHandle(req, res, funcsend);
+ // })
+ // })
+ // }else{
+ // ThinkNode.findControllAndHandle(req, res, funcsend);
+ // }
+ // }
+
+ } else {
+ node_session=req.cookie.node_session;
+ req.session=session[node_session];
+ // //session以文件存储
+ // let sessionId = req.cookie.node_session;
+ // //获取session的数据
+ // fs.readFile("./session/" + sessionId + ".txt", function (err, data) {
+ // //执行控制器,与后置控制器
+ // let session = data;
+ // req.session = session;
+ // ThinkNode.findControllAndHandle(req, res, funcsend);
+ // })
+ }
+ ThinkNode.findControllAndHandle(req, res, funcsend);
+ })
+ },
+ server: function () {
+
+ var funcs = []; // 待执行的函数数组----前置控制器
+ var funcsend = []; // 待执行的函数数组----后置控制器
+ var app = function (req, res) {
+ var i = 0;
+ //前置中间件
+ ThinkNode.next(funcs, i, req, res);
+ //中间件end
+ //执行解析数据与控制器与后置控制器
+ ThinkNode.parseDataAndHanle(req, res, funcsend)
+ }
+
+ /**
+ * use方法就是把函数添加到函数数组中---前置控制器
+ * @param task
+ */
+ app.use = function (task) {
+ funcs.push(task);
+ }
+
+ /**
+ * use方法就是把函数添加到函数数组中---后置控制器
+ * @param task
+ */
+ app.useend = function (task) {
+ funcsend.push(task);
+ }
+
+ return app; // 返回实例
+ }
+
+
+}
+
+module.exports = ThinkNode;
+
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/app.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/app.js"
new file mode 100644
index 0000000000000000000000000000000000000000..867b7e56fcfbc82cad403c8c8d062aec66fc08df
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/app.js"
@@ -0,0 +1,58 @@
+/**
+////////////////////////////////////////////////////////////////////
+// _ooOoo_ //
+// o8888888o //
+// 88" . "88 //
+// (| ^_^ |) //
+// O\ = /O //
+// ____/`---'\____ //
+// .' \\| |// `. //
+// / \\||| : |||// \ //
+// / _||||| -:- |||||- \ //
+// | | \\\ - /// | | //
+// | \_| ''\---/'' | | //
+// \ .-\__ `-` ___/-. / //
+// ___`. .' /--.--\ `. . ___ //
+// ."" '< `.___\_<|>_/___.' >'"". //
+// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
+// \ \ `-. \_ __\ /__ _/ .-` / / //
+// ========`-.____`-.___\_____/___.-`____.-'======== //
+// `=---=' //
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
+// 佛祖保佑 永不宕机 永无BUG //
+////////////////////////////////////////////////////////////////////
+ *
+ *
+ *
+ *
+ * /
+ */
+
+let http= require("http");
+let ThinkNode = require("./ThinkNode");
+let app=ThinkNode.server();
+
+http.createServer(app).listen(8080);
+//中间件
+app.use(function(req,res){
+ console.log('=======================================================');
+ console.log(req.url);
+ ThinkNode.next();
+})
+
+app.use(function(req,res){
+ console.log('cookie====='+req.headers.cookie);
+
+})
+
+app.useend(function(req,res,content){
+ // console.log('处理的结果为'+content);
+ // content+='112233
'
+ // ThinkNode.next();
+
+})
+
+app.useend(function(req,res,content){
+ // console.log('处理的结果为'+content);
+ // ThinkNode.next();
+})
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/config/application.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/config/application.js"
new file mode 100644
index 0000000000000000000000000000000000000000..98c1dee09358221cd0c4600805ac991412a45d64
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/config/application.js"
@@ -0,0 +1,5 @@
+let application={
+ even:'dev'
+}
+
+module.exports=application;
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/config/db.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/config/db.js"
new file mode 100644
index 0000000000000000000000000000000000000000..d1a464f64622a72df012fb0045824edaa5698f49
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/config/db.js"
@@ -0,0 +1,10 @@
+let dbconfig = {
+
+ host: '127.0.0.1',
+ user: 'root',
+ password: 'root',
+ database: 'yiqing',
+ port: '3306'
+
+}
+module.exports = dbconfig;
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/cookie.md" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/cookie.md"
new file mode 100644
index 0000000000000000000000000000000000000000..4ee22107284d52c2b3e07cf533259ca48d1b6a7f
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/cookie.md"
@@ -0,0 +1,20 @@
+# 作业回顾,写一个登陆页面,实现注册密码保存为md5
+
+
+# 前台数据怎么提交到后台?form 表单中的 action就是可以指向后端的地址
+
+# get 和 post 区别? 从传递参数区分:get 通过 url post 参数 todo ,数据大小区分:url 有没长度限制?有长度限制,post没有大小限制
+
+# 怎么去获取post数据? 在node web服务器上,post传递它是以流的方式传递
+
+# http协议:特点 无状态 短连接 多媒体, 从清除 码云的cookie 码云就没有登录状态可知 cookie是实现状态记录的方式之一
+
+# 首先什么是cookie:中文编译 小饼干,曲奇,从我们清除码云的行为可知道,cookie 是存在哪的数据?存储在客户端的数据,以域名为区分
+
+# todo 三四节课,去看看cookie的其它介绍
+
+# node 如何获取与写入cookie,首先实现 cookie的写入,服务端的cookie的写入,res.setHeader('Set-Cookie',[数组]) 数组的元素字符串用=相连
+
+# 如 res.setHeader('Set-Cookie',['demo=123456','demo2=78910']);
+
+# 作业:把用户注册页完善下,继续实现登录逻辑
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/favicon.ico" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/favicon.ico"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/.keep" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/.keep" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/BaseController.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/BaseController.js"
new file mode 100644
index 0000000000000000000000000000000000000000..b51be09f437338ca293b3e6a547ef4626962a89a
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/BaseController.js"
@@ -0,0 +1,39 @@
+
+
+
+class BaseController {
+
+ constructor(req, res, nunjucks) {
+
+ this.req = req;
+ this.res = res;
+ this.nunjucks = nunjucks;
+ this.nunjucks.configure('./home/html', { autoescape: true });//配置模板的目录
+
+ }
+
+ setSession(key, val) {
+ this.res.session[key] = val;
+ }
+
+ getSession(key) {
+ return this.req.session[key];
+ }
+
+ setCookie(key, val, expries) {
+ this.res.setHeader('Set-Cookie', key + "=" + val + "; expries:" + expries);
+ }
+
+ getCookie(key) {
+ return this.req.cookie[key];
+ }
+
+
+ display(path, data) {
+ return this.nunjucks.render(path, data);
+ }
+
+
+}
+
+module.exports = BaseController;
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/IndexController.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/IndexController.js"
new file mode 100644
index 0000000000000000000000000000000000000000..ffb097295ded53717c63840040c7fe6135a44ccf
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/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']?this.req.query['date']:'2022-3-15';
+ //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\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/UserController.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/UserController.js"
new file mode 100644
index 0000000000000000000000000000000000000000..46c0936e0101a04c82fbdcab785031c3eec5806f
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/UserController.js"
@@ -0,0 +1,67 @@
+const BaseController = require("./BaseController");
+
+const UserModel = require("../../model/UserModel");
+const EncAndDec = require("../../untis/EecAndDec");
+
+
+class UserController extends BaseController {
+
+ async login() {
+ this.setCookie("userLogin","ok");
+ return this.display("login.html");
+ }
+
+ async insert() {
+ let user = new UserModel();
+ return await user.insert({name:'admin2',password:'654321'});
+ }
+
+ async delete() {
+ let user = new UserModel();
+ return await user.delete({name:'admin2'});
+ }
+
+
+ async update() {
+ let user = new UserModel();
+ return await user.update({name:'admin2'},{id:3});
+ }
+
+ /**
+ * 前台用户注册页面
+ * @returns
+ */
+ async userReg(){
+ return this.display("userReg.html");
+ }
+
+ /**
+ *
+ * @returns 用户注册后端逻辑
+ */
+ async handleReg(){
+
+ //let name = this.req.post['name'];
+ //let password = EncAndDec.md5(this.req.post['password']);
+ //写入到数据库 你们完善 TODO
+ return this.display("userReg.html");
+ }
+
+ async userList(){
+ let cookie = this.getCookie('userInfo');
+ console.log(cookie);
+ let user = new UserModel();
+
+ try{
+ let userList = await user.find({name:'demo',password:'123456'});
+ return JSON.stringify(userList);//就是把对象转成json格式
+
+ }catch(err){
+ console.log(err);
+ }
+
+
+ }
+
+}
+module.exports = UserController;
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/index.js" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/index.js"
new file mode 100644
index 0000000000000000000000000000000000000000..fb69ae86016b681a654ce9e296d5e5e183c54bbd
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/controller/index.js"
@@ -0,0 +1,79 @@
+/**
+ * 在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;
+
+//
\ No newline at end of file
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/.keep" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/.keep"
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git "a/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/detail.html" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/detail.html"
new file mode 100644
index 0000000000000000000000000000000000000000..f6fbfa950367b48ccdd8dcc5e64b93c866cd2c53
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/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\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/footer.html" "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/footer.html"
new file mode 100644
index 0000000000000000000000000000000000000000..d619210ac5cfa2dd8f909c0a035f7a6128f9c6b0
--- /dev/null
+++ "b/\346\234\261\347\276\216\346\236\227/20220324_\351\241\271\347\233\256\346\225\264\346\224\271/home/html/footer.html"
@@ -0,0 +1,5 @@
+
+