NODE.JS DB (1)

npm install oracledb@^5.5.0 --save : database 연결 기능 설치

* 동기 : 순서가 일정함, 비동기 : 순서가 일정하지 않음

promise() : 비동기로 동작하는 함수의 값을 보장해준다

resolve() : return 역할

setTimeout(함수, 시간) : 해당하는 함수를 지정한 시간 간격으로 계속 호출

async : 해당 함수 안에는 비동기로 동작하는 함수가 있다고 알려줌

await : 함수가 값을 가져올 때 까지 기다려주는 역할

.then : promise에 대한 값 설정

require("oracledb") : oracleDB 가져오기

dbConfig = {} : oracleDB정보 설정

oracleDB명.getConnection(oracleDB정보명) : DB정보 가져오기

const express = require("express");
const app = express();
let con;
app.get("/", (req, res) => {
  console.log("1.연동전..");
  con = connect();
  con.then((msg) => {
    //promise에 대한 값 설정
    console.log("3.연동 완료 후 특정 기능 사용..");
    res.send("con : " + msg);
  });
});

const connect = () => {
  let msg;
  return new Promise((resolve) => {
    //비동기로 동작하는 함수의 값을 보장해준다
    setTimeout(() => {
      msg = "연동 되었습니다";
      console.log("2.연동 하는 중..");
      resolve(msg); //retrun 역할
    }, 1000); //해당하는 함수를 지정한 시간 간격으로 계속 호출
  });
};

app.get("/async", async (req, res) => {
  // async 이 함수 안에는 비동기로 동작하는 함수가 있다고 알려줌
  console.log("1111 연동전 async");
  con = await connect(); // 함수가 값을 가져올 때 까지기다려주는 역할
  console.log("3333 받아온 객체 연산 async");
  res.send("con : " + con);
});

const oracleDB = require("oracledb"); //oracleDB가져오기
const dbConfig = {
  // oracleDB정보 설정
  user: "c##LTY",
  password: "1213",
  connectSring: "localhost:1521/orcl",
};
app.get("/connect", async (req, res) => {
  let con = await oracleDB.getConnection(dbConfig); //DB정보 가져오기
  console.log("con : ", con);
  //con.execute("sql 명령어");

  let con1 = oracleDB.getConnection(dbConfig);
  con1.then((res) => {
    console.log("res ; ", res);
    //res.execute("sql 명령어");
  });
  console.log("con11 : ", con1);
  res.send("con : " + con);
});

app.listen(3000, () => {
  console.log("3000");
});

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS DB (2)

require("라우터 경로")(app) : 해당하는 경로에 app을 전달하겠다는 의미

* app.js에서 받아온 app을 통해 좀더 간단하게 표현 가능

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS DB (3) select

* DB내용을 받아올 때 비동기 방식이므로 DAO, service, controller에 모두 비동기 처리를 해줘야 한다

비동기 처리 : async를 해당 함수에 적은 후, 해당되는 곳에 awiat를 적는다

db명.autoCommit = true : sql로 수정이나 삭제 등을 할 때 자동으로 commit해주는 역할

db명.outFormat = db명.OBJECT : 2차원 배열 대신, 키 배류 형식으로 보여주는 역할

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS DB (4) insert

con.excute(sql, body) : body안에 있는 정보를 가져와야 하기 때문에 .body를 쓴다

* sql문 작성할 때 :뒤에 나오는 이름은 컬럼명과 같게 한다

* 쿼리문에 오류가 생길 때를 처리하기 위해 try catch문을 활용한다

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS DB (5) delete

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS DB (6) modify

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NODE.JS include

<%- include(경로) %> : 공통적으로 사용해야 하는 ejs가 있을때 활용

 

 

 

 

 

 

 

 

 

 

 

 

Quiz01

 

풀이 과정

const ser = require("../../service/member/member_service");
const login = (req, res) =>{
    res.render("member/login",{username : req.session.username});
}
const loginCheck = async (req, res) =>{
    const msgPack = await ser.loginCheck( req.body );
    if( msgPack.result === 0){
        req.session.username = req.body.id;
    }
    res.send( msgPack.msg );
}
const logout = (req, res) =>{
    req.session.destroy();
    res.clearCookie('isLogin');
    res.redirect("/");
}
const memberList = async (req, res) =>{
    console.log("username => ", req.session.username);
    console.log("isLogin => ", req.cookies.isLogin);
    
    if(!req.cookies.isLogin && !req.session.username){
        msg = "로그인 사용자만 접근 가능합니다!!!";
        url = '/member/login';
        return res.send( ser.getMessage(msg, url) );
    }

    const list = await ser.memberList();
    res.render("member/list",{ list : list });
}
    
const registerView = (req, res) =>{
    res.render("member/register_view");
}
const register = async (req, res) => {
    const msg = await ser.register( req.body );
    res.send( msg );
}

const getMember = async (req, res) =>{
    const member = await ser.getMember( req.params.id );
    res.render("member/info", { member, username:req.session.username });
}

const memberDelete = async (req, res) =>{
    const result = await ser.memberDelete( 
                req.params.id, req.session.username );
    if(result === 1){
        return res.redirect("/member/logout");
    }else if(result === 0 ){
        return res.redirect("/member/list");
    }
    msg = "삭제 실패!!!";
    url = '/member/list';
    return res.send( ser.getMessage(msg, url) );
}
const memberModifyView = async (req, res) =>{
    if(req.session.username === req.params.id ){
        const member = await ser.getMember(req.params.id);
        return res.render("member/modify_form", { member });
    }
    res.send( ser.getMessage("수정할 수 없음!!",
                        "/member/member_info/"+req.params.id) );
}

const memberModify = async (req, res) =>{
    const msg = await ser.memberModify(req.body);
    res.send(msg);
}
module.exports = { 
    login,loginCheck,logout,memberList,registerView 
    ,register,getMember,memberDelete,memberModifyView , memberModify
};
const memberDAO = require("../../database/member/member_dao");
const loginCheck = async ( body )=>{
    let member = await memberDAO.getMember( body.id );
    let msg="", url="", msgPack = {};
    if(member.rows.length == 1){
        member = member.rows[0];
        if( member.PWD === body.pwd ){
            msg = `${member.NAME}님 환영합니다^^`;
            url = "/";
            msgPack.result = 0;
        }else{
            msg = "비밀번호가 틀렸습니다!!!";
            url = '/member/login';
            msgPack.result = 1;
        }
    }else{
        msg = "존재하지 않는 아이디입니다!!";
        url = "/member/login";
        msgPack.result = 1;
    }
    msgPack.msg = getMessage(msg, url);
    return msgPack;
};
const  getMessage = (msg, url) =>{
    return `<script>alert('${msg}'); location.href="${url}";</script>`;
}
const memberList = () =>{
    return memberDAO.memberList();
}
    
const register = async ( body )=>{
    let result = await memberDAO.register( body );
    let msg="", url="";
    console.log("result : ", result);
    if(result !== undefined){      
        msg = `${body.name}님 회원가입 성공^^`;
        url = "/member/login";
    }else{
        msg = "문제가 발생했습니다!!!";
        url = '/member/register_view';
    }
    return getMessage(msg, url);
};
const getMember = async ( id ) =>{
    const list = await memberDAO.getMember( id );
    return list.rows[0];
}
const memberDelete = async (id, username) =>{
    const result = await memberDAO.memberDelete( id );
    //삭제 실패 rowsAffected : 0, 성공 : 1
    if( result.rowsAffected === 1 ){
        if(id === username){ //로그인 사용자와 삭제사용자 일치
            return 1;
        }
    }else{//삭제 실패
        return -1; 
    }
    return 0; //로그인 사용자와 다른 사용자 삭제
}
      
const memberModify = async (body) => {
    const result = await memberDAO.memberModify(body);
    let msg="", url="";
    if(result.rowsAffected == 1){
        msg = `${body.name}님 수정되었습니다^^`;
        url = `/member/member_info/${body.id}`;     
    }else{
        msg = "문제가 발생했습니다!!!";
        url = `/member/modify/${body.id}`;
    }
    return getMessage(msg, url);
}
module.exports = { loginCheck , memberList , register , getMessage
        , getMember , memberDelete , memberModify };
const oracledb = require("oracledb");
const dbConfig = require("../../../config/database/db_config");
oracledb.autoCommit = true;
oracledb.outFormat = oracledb.OBJECT;

const getMember = async ( id ) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `select * from members where id='${id}'`;
    let member;
    try{
        member = await con.execute(sql);
        console.log(id)
    }catch(err){
        console.log( err );
    }
    return member;
}

const memberList = async ( ) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = "select * from members";
    return ( await con.execute(sql) ).rows;
}
const register = async ( body ) =>{
    const con = await oracledb.getConnection(dbConfig);
    const sql = "insert into members values(:id,:pwd,:name,:addr)";
    let result;
    try{
        result = await con.execute(sql, body);
    }catch(err){
        console.log(err)
    }
    return result;
}   
const memberDelete = async ( id ) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql = `delete from members where id='${id}'`;
    let result;
    try{
        result = await con.execute(sql);
    }catch(err){
        console.log( err );
    }
    return result;
}
const memberModify = async (body) => {
    const con = await oracledb.getConnection(dbConfig);
    const sql =
"update members set pwd=:pwd, name=:name, addr=:addr where id=:id";
    let result;
    try{
        result = await con.execute(sql, body );
    }catch(err){
        console.log(err);
    }
    return result;
}
module.exports = { getMember , memberList , register 
    , getMember , memberDelete , memberModify };

 

실행 결과

 

 

'node.js' 카테고리의 다른 글

NODE.JS 활용 (6)  (0) 2024.04.05
NODE.JS 활용 (5)  (0) 2024.04.04
NODE.JS 활용 (3)  (0) 2024.04.01
NODE.JS 활용 (2)  (0) 2024.04.01
NODE.JS 활용  (0) 2024.03.29

+ Recent posts