TypeScript - PostgreSQL

권민제·2021년 9월 11일
1

TypeScript

목록 보기
3/4
post-thumbnail

PostgreSQL 설치

Ts

$ npm i -D @types/pg

Js

$ npm i pg

DB Connection Config

import { Pool } from "pg";
import { env } from "./env";

export const connection = new Pool({
    user : env.database.user,
    host : env.database.host,
    database : env.database.database,
    password : env.database.password,
    port : env.database.port
})

pg 모듈의 Connection Pool를 사용해서 connection 설정

Service

import { connection } from '../config/database';

export const search_User = async(userEmail: String, userPwd: String, userSocial: String) => {
    const postdb = await connection.connect();
  	const search_User_SQL = "select * from test_user where user_email = $1 and user_pwd = $2 and user_social = $3";
    const params = [userEmail, userPwd, userSocial];
    try {        
        return new Promise((resolve, rejects)=>{
            postdb.query(search_User_SQL, params, (err, res)=>{
                if(err){
                    rejects(err);
                }
                resolve(res);
            });
        })
    } catch (err) {
        throw err;
    } finally {
        postdb.release();
    }
}

- Promise 형태로 반환을 return 값을 반환해줘야 Controller 쪽에서 await를 통해 sql result를 받아 올 수 있다.

- postgreSQL에서는 테이블 명이나 컬럼명이 대문자와 소문자가 섞여 있다면 큰따옴표 ("")로 감싸줘야야지 대문자를 인식을 한다. 그래서 되도록이면 테이블 명이나 컬럼명은 소문자로 설정해주는 것이 좋다.

Pool로 Connection을 가져온다음 finally를 통해 Connection을 release한다

Controller

import express ,{Request, Response} from 'express';

import { search_User } from '../service/userService';

const app = express();

app.post('/test', async(req: Request, res: Response)=>{    
    const userSocial: String = req.query.user_social as String;
    const userEmail: String = req.body.user_email;
    const userPwd: String = req.body.user_pwd;
    
    try {
        const result:any = await search_User(userEmail, userPwd, userSocial);
        // console.log(result.rows);
        // console.log(result.rowCount);
        if(result.rowCount > 0){
            res.status(200).send({
                success: true,
                result : result.rows
            });
        }else{
            res.status(400).send({
                success: false,
                message: "Resource Null"
            });
        } 
    } catch (err) {      
        console.error("post /test",err);
        res.status(500).send({
            success: false,
            message: "Server Error"
        });
    }
});

SQL문으로 데이터를 조회한 값이 저장되는 것은 rows의 배열형태로 저장이 된다. 그리고 rowCount는 rows 배열의 길이가 반환이 되어서 rowCount가 0이면 400을 response를 보내주면 된다

profile
성장하는 개발자!

0개의 댓글