在後臺修改前臺模板文件

查看模板目錄

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' οnclick='next(this)' >${data.content[i]}</p>`;
                        }else{
                            document.body.innerHTML += `<p data-dirtype='2' οnclick='next(this)' >${data.content[i]}</p>`;
                        }
                    }
                    document.body.innerHTML += `<span οnclick='back()'>返回</span>`;
                }else{//打開模板
                    document.body.innerHTML = `
                        <span οnclick='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);
    })
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章