단순 코드 기록/Node

Node_Template 사용 + Update

일일일코_장민기 2024. 3. 26. 17:43
728x90

template.js

module.exports={

    HTML: function(title, body, control){
        return `
            <!doctype html>
            <html>
            <head>
                <title>타이틀</title>
                <meta charset="utf-8">
            </head>
            <body>
                <h1>${title}</h1>
                ${body}
                ${control}
            </body>
            </html>
                `;
    },

    table: function(topics){
        var list = "<table border=1>";
        var i = 0;
        while(i < topics.length){
            list = list + `<tr>
            <td><a href="/selectOne?deptno=${topics[i][0]}">${topics[i][0]}</a></td>
            <td>${topics[i][1]}</td>
            <td>${topics[i][2]}</td>
            <td><a href="/delete/${topics[i][0]}">삭제</a></td>
            <td><a href="/updateForm?deptno=${topics[i][0]}">수정</a></td>
            </tr>`;
            i=i+1;
        }
        list += "</table>"
        return list;
    },

    Form: function(topics, url, metaData){
        var form = `<form action=${url} method="post"><br>`;
        var i = 0;
        console.log("topics: ", topics);
        while(i< topics.length){
            for (let j = 0; j < topics[i].length; j++) {
                form += `${metaData[j].name}<input type="text" value="${topics[i][j]}" name="${metaData[j].name}"><br>`;
            }
            i += 1;
        }
        form += `<input type="submit" value = "수정"></form>`;
        return form;
    },

    list: function(topics){
        var list = "<ul>";
        var i = 0;
        while(i<topics.length){
            list += `<li><a href="selectone?deptno=${topics[i].deptno}">${topics[i].deptno}</a></li>`;
            i=i+1;
        }
        list += "</ul>";
        return list;
    },



   
};

 

const express = require("express");
const app = express();

const server = app.listen(3010, () => {
    console.log("Start Server: localhost: 3010");
})
app.use(express.urlencoded({extended: true}));

app.set("views", __dirname + "/views");
app.set("view engine", "ejs");
app.engine("html", require("ejs").renderFile);

app.get("/", function(req, res){
    res.render("index2.html");
})
app.get("/insertForm", function(req, res){
    res.render("insertForm.html");
})


const oracledb = require("oracledb");
oracledb.initOracleClient();
const dbconfig = require("./dbconfig.js");

//*************************************
app.get("/select", function(req, res){
    getSelection(req, res);
})
//*************************************

app.get("/table", function(req, res){
    getTable(req, res);
})
app.get("/selectOne", function(req,res){
    getSelectOne(req, res);
})
app.get("/insert", function(req,res){      
    getInsertDeptGet(req, res);
})
app.post("/insert", function(req,res){    
    getInsertDeptPost(req, res);
})
app.get("/delete/:deptno", function(req,res){
    getDelete(req, res);
})

//*************************************
app.post("/update", function(req,res){
    getUpdate(req, res);
})
app.get("/updateForm", function(req,res){
    getUpdateForm(req, res);
})
//*************************************


//********************************************************************************************************************
var template = require("./lib/templete.js");        //template import
async function getSelection(req, res){
    try {
        oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        }, async function(err, connection){
            if (err) {
                console.error(err.message);
                return;
            }
            try {
                const result = await connection.execute("SELECT * FROM dept");
               
                var allData = result.rows;
                var table = template.table(allData);
                var control = `<a href="/insertForm">부서추가하기로 이동</a><hr>`;
                var html = template.HTML("template이용", table, control);
                res.send(html);
            } catch (error) {
                console.log(error);
            } finally {
                if(connection){
                    try {
                        await connection.close();
                    } catch(error){
                        console.log("error: ", error);
                    }
                }
            }
        });
    } catch (error) {
        console.log(error);
    }
}
//********************************************************************************************************************

async function getTable(req, res){
    let connection;
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("select * from dept order by deptno",
        function(error, data){
            if(error){
                console.log(error);
            }

            var headName = "";
            for (let index = 0; index < data.metaData.length; index++) {
                headName += "<th>"+data.metaData[index].name+"</th>"
            }
            var dataSet = "";
            for (let index = 0; index < data.rows.length; index++) {
                var dataes = "";
                dataes += "<td><a href='/selectOne?deptno="+data.rows[index][0]+"'>"
                            +data.rows[index][0]+"</a></td>"
                        + "<td>"+data.rows[index][1]+"</td>"
                        + "<td>"+data.rows[index][2]+"</td>"
                        + "<td><a href='/delete/"+data.rows[index][0]+"'>삭제</a></td>"
                dataSet += "<tr>"+dataes+"</tr>";
            }
            var resultData  = "<html><head><body><table border='1'>"
                            +"<tr>"+headName+"</tr>"
                            +dataSet
                            +"</table></body></head></html>"
            res.send(resultData);
            });
    } catch (error) {
        console.log(error);
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}

async function getSelectOne(req, res){
    let connection;
    let deptno = req.param("deptno");        
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("select * from dept where deptno=:num order by deptno", [deptno],
            function(error, data){
                if(error){
                    console.log(error);
                }

                var headName = "";
                for (let index = 0; index < data.metaData.length; index++) {
                    headName += "<th>"+data.metaData[index].name+"</th>"
                }

                var dataSet = "";
                for (let index = 0; index < data.rows.length; index++) {
                    var dataes = "";
                    dataes += "<td><a href='/selectOne?deptno="+data.rows[index][0]+"'>"
                                +data.rows[index][0]+"</a></td>"
                            + "<td>"+data.rows[index][1]+"</td>"
                            + "<td>"+data.rows[index][2]+"</td>"
                            + "<td><a href='/delete/"+data.rows[index][0]+"'>삭제</a></td>"
                    dataSet += "<tr>"+dataes+"</tr>";
                }
                var resultData  = "<html><head><body><h1>"+deptno+"번 부서보기</h1><table border='1'>"
                                +"<tr>"+headName+"</tr>"
                                +dataSet
                                +"</table></body></head></html>"
                res.send(resultData);
            }
        );

    } catch (error) {
        console.log(error);
       
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}

async function getInsertDeptGet(req, res){
    oracledb.autoCommit = true;
    let deptno = req.param("deptno");        
    let dname = req.param("dname");        
    let loc = req.param("loc");        
    console.log(deptno, dname, loc)
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("insert into dept(deptno, dname, loc) values (:deptno, :dname, :loc)", [deptno, dname, loc],
        function(error, result){
            console.log("실행됨");
            if(error){
                console.log(error);
                res.send("중복된 부서입니다");
            }
            console.log(result);            
            if(result.rowsAffected == 1){
                res.send("<a href='/table'>목록 보기</a>");
            }
        }
        );

    } catch (error) {
        console.log(error);
       
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}

async function getInsertDeptPost(req, res){
    oracledb.autoCommit = true;
    let deptno = req.param("deptno");        
    let dname = req.param("dname");        
    let loc = req.param("loc");        
    console.log(deptno, dname, loc)
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("insert into dept(deptno, dname, loc) values (:deptno, :dname, :loc)", [deptno, dname, loc],
        function(error, result){
            console.log("실행됨");
            if(error){
                console.log(error);
                res.send("중복된 부서입니다");
            }
            console.log(result);          
            if(result.rowsAffected == 1){
                res.send("<a href='/table'>목록 보기</a>");
            }
        }
        );

    } catch (error) {
        console.log(error);
       
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}

async function getDelete(req, res){
    oracledb.autoCommit = true;
    let deptno = req.params.deptno;        
    console.log("pathVariable data: ", deptno)
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("delete from dept where deptno = :num", [deptno],
        function(error, result){
            console.log("실행됨");
            if(error){
                console.log(error);
                res.send("삭제 실패");
            }
            console.log(result);            
            if(result.rowsAffected == 1){
                res.send("<a href='/select'>목록 보기</a>");
            }
        }
        );

    } catch (error) {
        console.log(error);
       
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}

//********************************************************************************************************************
async function getUpdate(req, res){
    oracledb.autoCommit = true;
  const { DEPTNO, DNAME, LOC } = req.body;
  console.log("update deptno: ", DEPTNO, DNAME, LOC);
    let connection
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("update dept set dname=:dname, loc=:loc  where deptno=:deptno", [DNAME, LOC, DEPTNO]);
        var html = template.HTML("수정완료 template", `<a href="/select">목록으로</a>`, "");
        res.send(html);

    } catch (error) {
        console.log(error);
       
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}

async function getUpdateForm(req, res){
    oracledb.autoCommit = true;
    const { deptno } = req.query;
    console.log("updateForm deptno: ", deptno);
    let connection
    try {
        connection = oracledb.getConnection({
            user: dbconfig.user,
            password: dbconfig.password,
            connectString: dbconfig.xid
        })
        const result = (await connection).execute("select deptno, dname, loc from dept where deptno=:deptno", [deptno]);
        var allData = (await result).rows;
        console.log("allData : >>.", allData)
        var metaData= (await result).metaData;
        console.log(result);
        var body = template.Form(allData, "/update", metaData);
        var html = template.HTML("update template", body, `<a href="/select">목록으로</a>`);
        res.send(html);

    } catch (error) {
        console.log(error);
       
    } finally {
        if(connection){
            try{
                (await connection).close
            } catch(error){
                console.log("error: ", error);
            }
        }
    }
}
//******************************************************************************************************************** */