DB를 연동하여 postman 실습하기

ssomae·2024년 9월 23일

DevCourse

목록 보기
19/29
post-thumbnail

DB 파일 모듈화

const mysql = require('mysql2');

// Create the connection to database
const connection = mysql.createConnection({
  host: 'localhost',
    user: 'root',
  password : '1234',
    database: 'Youtube',
  dateStrings : true
});

// A simple SELECT query
connection.query(
  'SELECT * FROM `users`',
  function (err, results, fields) {
    //console.log(results); // results contains rows returned by server
      for (let i = 0; i < results.length; i++){
          let { id, email, name, created_at } = results[i];
          console.log(id);
          console.log(email);
          console.log(name);
          console.log(created_at);
      }
  }
);
const mysql = require('mysql2');

// Create the connection to database
const connection = mysql.createConnection({
  host: 'localhost',
    user: 'root',
  password : '1234',
    database: 'Youtube',
  dateStrings : true
});

module.exports= connection 

users.js

const express = require('express');
const router = express.Router();
const conn = require('../mariadb')

// A simple SELECT query
conn.query(
  'SELECT * FROM `users`',
  function (err, results, fields) {
    //console.log(results); // results contains rows returned by server
      for (let i = 0; i < results.length; i++){
          let { id, email, name, created_at } = results[i];
          console.log(id);
          console.log(email);
          console.log(name);
          console.log(created_at);
      }
  }
);

router.use(express.json()) // http 외 모듈 'json' 사용

let db = new Map();
let id = 1; //객체 식별 아이디

function isExist(obj) {
    if (Object.keys(obj).length) return true;
    else return false;
}
// 로그인
router.post('/login', function (req, res) {
    console.log(req.body); //id, pwd

    //id가 db에 저장된 회원인지 확인
    const { userId, password } = req.body;
    //let hasUserId = false;
    let loginUser = {};
    db.forEach(function (user, id) {
        //console.log(user.userId);
        if (user.userId === userId) {
            loginUser = user;
        } 
    })
    
    if (isExist(loginUser)) {
        
        //넘어온 pwd가 id에 맞는 비밀번호인지
        if (loginUser.password === password) {
            res.status(200).json({
                message: `${loginUser.name}님 로그인 되었습니다`
            })
        } else {
            res.status(400).json({
                message: `비밀번호가 틀렸습니다`
            })
        }
    } else {
        res.status(404).json({
            message: '입력하신 아이디는 없는 아이디 입니다.'
        })
    }
})

// 회원 가입
router.post('/join', function (req, res) {
    console.log(req.body);
    // 입력된 body 객체가 비어 있지 않은지 확인
    if (Object.keys(req.body).length !== 0) {
        // 예시로 ID를 부여하는 방식을 간단히 시뮬레이션
        const {userId} = req.body
        db.set(userId, req.body);

        res.status(201).json({
            message: `${db.get(userId).name}님 환영합니다.`
        });
    } else {
        res.status(400).json({
            message: `입력값을 다시 확인해주세요.`
        });
    }
});

router
    .route('/users')
    .get(function (req, res) {
        let { userId } = req.body;
    
        const user = db.get(userId);
        if (user) {
            res.status(200).json({
                userId: user.userId,
                name : user.name
            })
        } else {
            res.status(404).json({
                message : '잘못된 아이디 번호입니다'
            })
        }
    })
    .delete(function (req, res) {
        let { userId } = req.body;
    
        const user = db.get(userId);
        if (user) {
            db.delete(id);
            res.status(200).json({
            message: `${user.name}님 다음에 또 뵙겠습니다`
            })
        } else {
            res.status(404).json({
                message : '잘못된 아이디 번호입니다'
            })
        }
    })

module.exports = router // 모듈화 진행

이전에 사용했던 users.js를 db연동해서 사용해보자 (개별조회)

  • body값으로 이메일을 입력받아, 정보를 넘겨보자
router
    .route('/users')
    .get(function (req, res) {
        let { email } = req.body;
        // A simple SELECT query
        conn.query(
            `SELECT * FROM users WHERE email = ?`, email,
            function (err, results, fields) {
                 res.status(200).json(results)
                
            }
        );   
            
    })
    

회원가입 DB연동 (INSERT)

  • req : body (email, name, pwd, contact)
// 회원 가입
router.post('/join', function (req, res) {
    console.log(req.body);
    // 입력된 body 객체가 비어 있지 않은지 확인
    if (Object.keys(req.body).length !== 0) {
        const { email, name, password, contact } = req.body;

        conn.query(
            `INSERT INTO users (email, name, password, contact) 
            VALUES (?, ?, ?, ?)`, [email, name, password, contact],
            function (err, results, fields) {
                res.status(201).json(results);
            }
        )
    } else {
        res.status(400).json({
            message: `입력값을 다시 확인해주세요.`
        });
    }
});

회원 탈퇴 DB연동 (DELETE)

  • req : body (email)
.delete(function (req, res) {
        let { email } = req.body;
        // A simple SELECT query
        conn.query(
            `DELETE FROM users WHERE email = ?`, email,
            function (err, results, fields) {
                 res.status(200).json(results)
                
            }
        ); 
    })

login db연동하기 (SELECT)

  • req : body(email, password)
// 로그인
router.post('/login', function (req, res) {

    //id가 db에 저장된 회원인지 확인
    const { email, password } = req.body;
   
    let loginUser = {};
    conn.query(
        `SELECT * FROM users WHERE email = ?`, email,
        function (err, results, fields) {
            loginUser = results[0];
            if (loginUser && loginUser.password === password) {
                res.status(200).json({
                    message: `${loginUser.name}님 로그인 되었습니다.`
                })
            }
            else {
                res.status(404).json({
                    message : "이메일 또는 비밀번호가 틀렸습니다"
                })
            }
            
        }
    );  
})

users.js 리팩토링 결과

const express = require('express');
const router = express.Router();
const conn = require('../mariadb')

router.use(express.json()) // http 외 모듈 'json' 사용

// 로그인
router.post('/login', function (req, res) {
    const { email, password } = req.body;
    let loginUser = {};
    let sql = `SELECT * FROM users WHERE email = ?`
    conn.query(sql,email,
        function (err, results) { 
            loginUser = results[0];

            if (loginUser && loginUser.password === password) { //email이 db에 저장된 회원인지 확인
                res.status(200).json({
                    message: `${loginUser.name}님 로그인 되었습니다.`
                })
            }
            else {
                res.status(404).json({
                    message : "이메일 또는 비밀번호가 틀렸습니다"
                })
            }
        }
    );  
})

// 회원 가입
router.post('/join', function (req, res) {
    // 입력된 body 객체가 비어 있지 않은지 확인
    if (Object.keys(req.body).length !== 0) {
        const { email, name, password, contact } = req.body;
        let sql = `INSERT INTO users (email, name, password, contact) VALUES (?, ?, ?, ?)`;
        let values = [email, name, password, contact]; 

        conn.query(sql,values,
            function (err, results, fields) {
                res.status(201).json(results);
            }
        )
    } else {
        res.status(400).json({
            message: `입력값을 다시 확인해주세요.`
        });
    }
});

router
    .route('/users')
    .get(function (req, res) {
        let { email } = req.body;
        let sql = `SELECT * FROM users WHERE email = ?`
        conn.query(sql,email,
            function (err, results, fields) {
                 res.status(200).json(results)          
            }
        );   
            
    })
    .delete(function (req, res) {
        let { email } = req.body;
        let sql = `DELETE FROM users WHERE email = ?`
        conn.query(sql, email,
            function (err, results, fields) {
                 res.status(200).json(results)
            }
        ); 
    })

module.exports = router // 모듈화 진행

channel.js DB 연동하기

채널 개별 조회 (SELECT)

  • req : URL(id)
.get((req, res) => {
        let { id } = req.params;
        id = parseInt(id);
        let sql = `SELECT * FROM channels WHERE id = ?`
        conn.query(sql, id,
            function (err, results) {
                if (results.length)
                    res.status(200).json(results)
                else
                    notFoundChannel();
            }
        )
    }) //채널 개별 조회

채널 전체 조회 (SELECT)

  • req : body(user_id)
.route('/')
    .get((req, res) => {//채널 전체 조회
        const { userId } = req.body;

        let sql = `SELECT * FROM channels WHERE user_id = ?`
        let channels = []
        if (user_id) {
            conn.query(sql, userId,
                function (err, results) {
                    if (results.length)
                        channels = results;
                    else
                        notFoundChannel(res);
                }
            )
        }
        else
            res.status(400).end();
    }) 

채널 등록(INSERT)

  • req : body(name, user_id)
.post((req, res) => {
        const { name, userId } = req.body;
        if (name && userId) {
            let sql = `INSERT INTO channels (name, user_id) VALUES (?, ?)`;
            let values = [name, userId];
            conn.query(sql, values,
                function (err, results) {
                    res.status(201).json(results);
                }
            )
        } else {
            res.status(400).json({
                message : '요청값을 제대로 보내주세요'
            })
        }
    }) //채널 개별 생성
profile
성장해나갈 개발자

0개의 댓글