在后台修改前台模板文件

xiaoxiao2021-02-28  141

查看模板目录

fs.readdirSync("路径")

访问/admin/views

admin.js

outer.get('/views',(req,res) => { let dir = fs.readdirSync(`${process.cwd()}/views`); res.render('view.ejs',{dir:dir}) }); router.post("/views",(req,res)=>{ let dirname = req.body.dirname, dirtype = req.body.dirtype, content = req.body.content; // 单个文件 if(dirtype === '1'){ fs.readFile(`${process.cwd()}/views/${dirname}`,'utf-8',(err,data)=>{ res.json({ content:data, dirname: dirname }); }) return; } // 文件夹 if(dirtype === '2'){ fs.readdir(`${process.cwd()}/views/${dirname}`,(err,data)=>{ res.json({ dirtype: '2', dirname: dirname, content:data }) }) return; } // 模块修改 if(dirtype === '3'){ fs.writeFile(`${process.cwd()}/views/${dirname}`,content,(err,data)=>{ res.json({ result:"修改成功" }) }) } })

view.ejs

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <!-- includes是否含有 --> <% for(var i in dir){ %> <% if(dir[i].includes('.')){ %> <!-- data-dirtype: 1=>单个文件 2=>文件夹 --> <p data-dirtype='1' onclick='next(this)' ><%= dir[i] %></p> <% }else{ %> <p data-dirtype='2' onclick='next(this)' ><%= dir[i] %></p> <% } %> <% } %> <script src='/js/jquery.js'></script> <script> let dirname, dirtype; function next(_this){ // console.log(_this.getAttribute('data-dirname'));// if(_this.getAttribute('data-dirname') === null){ //如果是文件夹的文件 dirname = _this.innerText; }else{ dirname = `${_this.getAttribute('data-dirname')}/${_this.innerText}`; //设置路径 eg:admin/err.ejs }; dirtype = _this.getAttribute('data-dirtype'); $.ajax({ url:'/admin/views', type:'post', data:{ dirname:dirname, dirtype:dirtype }, success(data){ // console.log(data); // 如果返回是文件夹 打开文件夹 if(data.dirtype === '2'){ document.body.innerHTML = ''; // console.log(data.content); for(let i in data['content']){ // 下一级目录 if(data.content[i].includes('.')){ // 保存data-dirname : 文件夹目录名 document.body.innerHTML += `<p data-dirname='${data.dirname}' data-dirtype='1' onclick='next(this)' >${data.content[i]}</p>`; }else{ document.body.innerHTML += `<p data-dirtype='2' onclick='next(this)' >${data.content[i]}</p>`; } } document.body.innerHTML += `<span onclick='back()'>返回</span>`; }else{//打开模板 document.body.innerHTML = ` <span onclick='back()'>返回</span> <textarea cols= '80' rows='20'>${data['content']}</textarea> <button onclick='change()' >修改</button> ` } } }) } function back(){ document.body.innerHTML = ''; // 未解决 : 返回上级目录 dirname错乱 /*var str = ''; var a = _this.getAttribute('data-dirname'); if(a.includes('/')){ str = a.substring(0,(a.indexOf('/'))); console.log(a); console.log(str); }*/ $.ajax({ url:'/admin/views', type:'post', data:{ dirname: '', dirtype: '2' }, success(data){ for(let i in data['content']){ // 下一级目录 if(data.content[i].includes('.')){ document.body.innerHTML += `<p data-dirtype='1' onclick='next(this)' >${data.content[i]}</p>`; }else{ document.body.innerHTML += `<p data-dirtype='2' onclick='next(this)' >${data.content[i]}</p>`; } } } }) } function change(){ console.log($('textarea').val()); $.ajax({ url:'/admin/views', type:"post", data:{ dirname:dirname, dirtype:'3', content: $('textarea').val() }, success(data){ alert(data.result); } }) } </script> </body> </html>

promise实际运用 优化sql代码

router.get('/promise',(req,res)=>{ // 1.查询数据 不关联 可以用这方法 /* 'select * from article order by id desc limit 0,2' 'select * from comment where articleid' */ let fn = function(mysql){ return new Promise(function(resolve,reject){ sql(mysql,(err,data)=>{ resolve(data); }) }) } arr = [ fn('select * from article order by id desc limit 0,2'), fn('select * from comment where articleid') ] // 2.如果有依赖关系 ,先把没依赖的取出, 再执行依赖的 Promise.all(arr).then(function(data){ // 数据格式 /* data = [ [第一条数据结果], [第二条数据结果] ] */ console.log(data); }) })
转载请注明原文地址: https://www.6miu.com/read-63067.html

最新回复(0)