Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- docker-compose
- Generic
- ConstraintLayout
- ReactNative
- class component
- 생명주기
- lifecycle
- Kotlin
- map
- elementAt
- vuex
- react native
- AWS
- Interface
- docker
- animation
- enum
- LiveData
- union
- Filter
- MINUS
- mongoose
- list
- Swift
- CLASS
- function
- recyclerview
- Foreign Key
- Service
- collection
Archives
- Today
- Total
개발 일기
Node Mysql ? 본문
MYSQL은 일단 대표적인 관계형 데이터베이스중에 하나입니다.
사전 준비:)
-
MYSQL 설치
기본 설정:)
npm install --save mysql
MYSQL 연동 :)
일단 제일 먼저 간단한 소스 예제를 보여드리겠습니다.
설명은 주석으로 작성하겠습니다.
const mysql = require('mysql')
let pool
// 제일 먼저 초기화 하는 부분입니다.
// async await 사용을 하셔도 됩니다. 일단 기본적으로 promise로 이렇게 구성하였습니다.
export async function initialize(process){
// 현재 저는 단일커넥션 (createConnection) 과 커넥션 풀(createPool) 중에 커넥션 풀으로 사용하였습니다.
new Promise((resolve , reject) => {
//db 정보를 입력합니다.
let connection = mysql.createPool({
host: process.DB_HOST, // db host
user: process.DB_USER, // db user
password: process.DB_PASS, // db password
acquireTimeout: 15000, // 시간 초과 (기본값 10000)
connectionLimit: 50 // 한번에 최대 limit 수 ( 기본값 10 )
})
// 데이터 베이스 생성 schema == database 같습니다.
connection.getConnection((err, connection) => {
if (err) { return reject(err) }
connection.query('CREATE SCHEMA IF NOT EXISTS words DEFAULT CHARACTER SET utf8', null , (error, result) => {
connection.release()
error ? reject(error) : resolve(result)
})
})
}).then(() => {
pool = mysql.createPool({
host: process.DB_HOST,
database: process.DB_NAME,
user: process.DB_USER,
password: process.DB_PASS,
acquireTimeout: 15000,
connectionLimit: 50
})
}).catch(error => {
console.log(error)
})
}
// 쿼리 요청
// 요청 예시 :)
let obj = {
sql : "INSERT INTO users ( email , code ) VALUES (? , ?)",
params : [email , code]
}
export async function query(sqlObj) {
return new Promise((resolve, reject) => {
// connection 얻고 쿼리 실행
pool.getConnection((err, connection) => {
if (err) { return reject(err) }
connection.query(sqlObj.sql, sqlObj.params, (error, result) => {
connection.release()
error ? reject(error) : resolve(result)
})
})
})
}
// mysql은 transaction을 지원합니다.
// 그래서 다음과 같이 rollback or commit을 할수가 있습니다.
export async function transaction(sqlArr) {
return new Promise((resolve, reject) => {
pool.getConnection((poolError, connection) => {
if (poolError) { return reject(poolError) }
// transaction 시작
connection.beginTransaction(async err => {
if (err) { return reject(err) }
let result = [],
errInfo = null
for (let i = 0; i < sqlArr.length; i++) {
try {
result.push(await new Promise((resolve, reject) => {
connection.query(sqlArr[i].sql, sqlArr[i].params, (err, result) => {
err ? reject(err) : resolve(result)
})
}))
} catch (e) {
errInfo = e
break
}
}
if (errInfo) {
// 에러가 생기면 이때 가지 한 내용 취소
connection.rollback(() => {
connection.release()
reject(errInfo)
})
} else {
// 저장
connection.commit(err => {
connection.release()
err ? reject(err) : resolve(result)
})
}
})
})
})
}
'서버 > Node.js' 카테고리의 다른 글
CORS ? (0) | 2020.05.02 |
---|---|
Database migration (db-migrate) (0) | 2020.05.02 |
bcrypt ? (0) | 2020.04.15 |
Node js 보안 - (1) (0) | 2020.04.11 |
Node Mailer 란? (0) | 2020.04.04 |
Comments