diff --git "a/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/config/db.js" "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/config/db.js" new file mode 100644 index 0000000000000000000000000000000000000000..d3539ecb77c4fe3cb136351eacab266756dd45ab --- /dev/null +++ "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/config/db.js" @@ -0,0 +1,10 @@ +let dbconfig = { + + host: '127.0.0.1', + user: 'root', + password: '123456', + database: 'yiqing', + port: '3306' + +} +module.exports = dbconfig; \ No newline at end of file diff --git "a/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/dynamic.js" "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/dynamic.js" new file mode 100644 index 0000000000000000000000000000000000000000..2f14ad5734449f41f68d34f864a9fcf204238d14 --- /dev/null +++ "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/dynamic.js" @@ -0,0 +1,169 @@ +let http = require("http"); +let fs = require("fs"); +let nunjucks = require("nunjucks"); +const mysql = require('mysql') +let session = []; +// session['123'] = { 'name': 'zhangsan', age: 20 }; +const connection =mysql.createConnection({ + host:'127.0.0.1', + port:3306, + user:'root', + password:'123456', + database:'yiqing' + +}) +let server = http.createServer(); +server.listen(8080); +server.on('request', async function (req, res) { + console.log('-----------------------------'); + let postData = ''; + req.on('data', function (chunk) { + postData += chunk; + }) + req.on('end', async function () { + // postData = queryString.parse[postData] + // res.end(util.inspect(postData)) + console.log("流方式获取数据:::::"); + console.log(postData); + + //拆分post数据 + let postArr = postData.split("&"); + let postVals = []; + for (let ky in postArr) { + let val = postArr[ky] + let temPostArray = val.split("=") + postVals[temPostArray[0] = temPostArray[1]] + } + req.post = postVals; + let url = req.url; + console.log(url); + //用户名及密码 + console.log("用户名"+postArr[0]); + console.log("密码"+postArr[1]); + connection.query(`insert into user values('7',['poystArr[0]'],'['postArr[1])']')`,(err,result)=>{ + if(err){ + console.log("错误" +err); + console.log("插入失败"); + }else{ + console.log(result); + console.log("插入成功"); + } + }) + + // console.log(postVals); + //静态资源与动态资源判断 + //在web服务器,要尽量使用异步函数 + //web服务器给谁用的,给用户,给管理员用 + //node自身的问题,node 是单线程的. + //404 页面 + if (url.lastIndexOf('.') > -1) { + console.log(url); + let path = '.' + url; + readFileByPromise(path, res); + console.log(1); + } else { + //取出cookie,把cookie转成 key=val 的数组 + // res.setHeader('Set-Cookie','b=200') + //res.setHeader('Set-Cookie', user+'='+password) + req.cookie = {}; + if (req.headers.cookie) { + let cookieStrArr = req.headers.cookie.split("; "); + let cookies = {}; + cookieStrArr.forEach(element => { + let cookieKeyAndVal = element.split("=") + cookies[cookieKeyAndVal[0]] = cookieKeyAndVal[1] + }); + console.log('session获取到的数据'); + console.log(cookieStrArr); + console.log(cookies + "============这个是cookies"); + // console.log(cookies['demo']); + // console.log(session[cookies['demo']]); + req.cookie = cookies; + // console.log(cookie); + } + let node_session = null; + + if (!req.cookie.node_session) {//没有node_session设置一个 + node_session = (new Date().getTime() + "_" + Math.random()); + res.setHeader('Set-Cookie', "node_session=" + node_session); + req.cookie.node_session = node_session; + } else {//有node_session + node_session = req.cookie.node_session; + } + res.setHeader("Content-type", "text/html;charset=utf8"); + if (session[node_session]) { + console.log('session data'); + console.log(session); + req.session = session[node_session]; + } + //去除query,使用split 以 demo?a=index&c=index 为例 + + let queryString = url.split("?")[1];//a=index&c=index + + let queryArr = queryString.split("&");// ['a=index','c=index']; + + let keyVals = []; + for (let key in queryArr) { + let vals = queryArr[key];//'a=index'....... + let temArray = vals.split("="); + keyVals[temArray[0]] = temArray[1]; + } + //给 req 对象添加一个 query + req.query = keyVals; + console.log(keyVals['c']); + let controllerPath = './home/controller/' + keyVals['c'].replace(keyVals[0], keyVals['c'][0].toUpperCase()) + "Controller"; + + //正常的项目.controller 是由多个的,model也是有多个的,所以通过url 可动态的调用 + let controller = require(controllerPath); + //console.log(keyVals['a']); + //keyVals['a'] 变量吧,所以在json 里面,要去调用它的key ,用 .方式 key必须是个常量, + console.log(controller); + let action = keyVals['a']; + console.log(action); + + let obj = new controller(req, res, nunjucks); + let content = await obj[action](); + // console.log(content); + if (res.session) { + session[node_session] = res.session; + } + if (content === '301') { + res.writeHead('301', { 'location': '/?c=user&a=userLists' }) + res.end(); + } else { + res.write(content) + res.end(); + } + // let date = new Date(); //获取到当前时间 + // date.setTime(date.getTime() + 30 * 60 * 10000);//毫秒 + // console.log(date); + // res.setHeader('Set-Cookie', "userInfo=987654321; expires="+date.toGMTString()+"; path=/mydir;"); + // let show = keyVals['a']; + //console.log(controller[show](req,res));//json 访问,如果key是变量要在[] + } + + }) + +}) +let promise = function (filename) { + + return new Promise(function (resolve, reject) { + + fs.exists(filename, function (result) { + if (!result) { + //filename = './home/img/404.png'; + } + fs.readFile(filename, function (err, data) { + resolve(data); + }) + }) + }) +} + +async function readFileByPromise(fileName, res) { + let data = await promise(fileName); + if (data) { + res.write(data); + } + res.end(); +} diff --git "a/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/fs.js" "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/fs.js" new file mode 100644 index 0000000000000000000000000000000000000000..3569d4f218398cb899f152decd37745c7ba73c95 --- /dev/null +++ "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/fs.js" @@ -0,0 +1,36 @@ +function load(url) { + var http = require('http'); + var pm = new Promise(function(resolve, reject) { + http.get(url, function(res) { + var html = ''; + res.on('data', function(read) { + html += read.toString(); + }); + res.on('end', function() { + resolve(html); + }); + }).on('error', function(e) { + reject(e) + }); + }); + return pm; +} +//参考网上教程 获取网页内容 抓取一言api返回的数据 获取随机句子 存入 +function api(num,format) { + for (let i = 0; i < num; i++) { + load('https://192.168.1.134?a=index&c=index&date=2022-3-15').then(function(read) { + let sz = []; + sz[i] = read.trim(); + if (sz[i]=="") { + sz[i]="未能获取到数据,请尝试重新获取" + } + const fs = require('fs'); + fs.writeFile(`./每日一句${i+1}.${format}`, sz[i], err => { + if (err) throw err; + // console.log(sz[i]) + }); + }); + } +} +//设置创建几个文件,格式默认为txt 可更改 +api(5,'txt'); diff --git "a/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/DemoController.js" "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/DemoController.js" new file mode 100644 index 0000000000000000000000000000000000000000..8e44f5472ebdf4ea6d486067398d90cf0ea9a81a --- /dev/null +++ "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/DemoController.js" @@ -0,0 +1,15 @@ +class DemoController{ + 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 = DemoController \ No newline at end of file diff --git "a/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/IndexController.js" "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/IndexController.js" new file mode 100644 index 0000000000000000000000000000000000000000..05c516a335f84cde3f04b8fac39fa2ea6f338fa3 --- /dev/null +++ "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/IndexController.js" @@ -0,0 +1,74 @@ +const DemoController = require("./DemoController"); +let mysql = require("../../demo"); + +class IndexController extends DemoController { + + + 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; diff --git "a/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/LoginController.js" "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/LoginController.js" new file mode 100644 index 0000000000000000000000000000000000000000..7a943fbe2008790a1d00e2bc40f16c7b578c9f6c --- /dev/null +++ "b/\351\231\210\351\233\204\350\276\211/2022-3-26\347\273\203\344\271\240/home/controller/LoginController.js" @@ -0,0 +1,40 @@ +const connection = require("./mysql.js"); +class LoginController extends DemoController{ + async login(){ + try{ + return this.nunjucks.render('login.html',{}); + }catch(err){ + console.log(err); + } + } + async userList() { + let user = new usermodel() + try{ + let userList = await user.select(); + return JSON.stringify(userList)//把对象转化为json格式 + + }catch(err){ + console.log(err); + } + } +} + +connection.query("select * from user where user=?", [username], function (result, filed) { + //result是mysql查询返回的原始数据。查询语句中的‘?’是占位符,用于将SQL查询语句替换为‘[]’中的值。 + //处理mysql返回的类似json格式的数组,处理为json数据 + let resultJson = JSON.stringify(result); + //JSON.parse()用来解析JSON字符串 + let dataJson = JSON.parse(resultJson); + //获得解析后的具体数值 + let name = dataJson[0].userName; + let pwd = dataJson[0].userPwd; + //比较数据库获到的用户信息和用户表单输入的是否一致,一致则跳转成功页面,findPage()为自定义的页面跳转函数 + if (pwd === userpwd && name === username) { + console.log("密码正确!"); + findPage('/success.html', response); + } else { + console.log("密码错误!"); + response.end('