[Nestjs] #3. Nestjs+mysql 연동

exoluse·2021년 12월 2일
2

Nestjs

목록 보기
3/7
post-thumbnail

이번 포스팅의 목표

json 데이터를 Post 전송해서 mysql.user 테이블의 정보를 가져온다.

일단! Mysql 설치

npm install mysql

DB 공통 컴포넌트 생성

const mysql = require('mysql');

let _dbConn = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mysql'
});


function _dbQuery(sqlString, values) {
    
    if (!values) values = [];
   
    return new Promise((resolve, reject) => {
        _dbConn.query(sqlString, values, (err, results) => {
            if (err) {
                reject(err);
                return;
            }
            resolve(results);
        });
    });
}

function _dbQueryOne(sqlString, values) {
    
    if (!values) values = [];
   
    return new Promise((resolve, reject) => {
        _dbConn.query(sqlString, values, (err, results) => {
            if (err) {
                reject(err);
                return;
            }
            resolve(results[0]);
        });
    });
}


export { _dbConn, _dbQuery, _dbQueryOne } 

컨트롤러 수정

import { Controller, Get, Body, Post } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {

    constructor( private userService:UserService ){}

    @Post("/getUser")
    getUser(@Body() userData){
        return this.userService.getUser(userData);
    }

}

서비스 수정

import { Injectable } from '@nestjs/common';
import { _dbConn, _dbQuery } from 'src/const/db';

@Injectable()
export class UserService {

    async getUser(userData){
        let userId = "exoluse";
        return _dbQuery(`select * from user where user = '${userData.userId}'`, [])
   }
}

테스트

궁금한점

mysql.createPool 을 하면... pool.getConnection 으로 커넥션을 가져와서 쿼리를 날리는데... 내가 구현한건 mysql.createPool.query 인데... 저렇게 해도 되는건가?

궁금한점 자문자답

npm mysql 공식사이트 (https://www.npmjs.com/package/mysql2)에 의하면 커넥션 풀의 쿼리가 resolve 되면 자동으로 release 된다고 한다.

// For pool initialization, see above
pool.query("SELECT field FROM atable", function(err, rows, fields) {
   // Connection is automatically released when query resolves
})

해결됨 ㄳ

0개의 댓글