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 |