일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- vue기초
- ambiguous function description
- 오블완
- ethers typescript
- git rebase
- ethers websocket
- 티스토리챌린지
- ethers
- 스마트컨트렉트 예약어 함수이름 중복
- 머신러닝기초
- multicall
- 러스트 기초 학습
- 스마트컨트렉트테스트
- Vue.js
- 러스트기초
- 러스트 기초
- chainlink 설명
- nest.js설명
- 스마트컨트렉트 함수이름 중복 호출
- 프록시배포구조
- ethers v6
- rust 기초
- 컨트렉트 배포 자동화
- 스마트 컨트렉트 함수이름 중복
- ethers type
- 스마트컨트렉트프록시
- 컨트렉트 동일한 함수이름 호출
- 체인의정석
- Vue
- SBT표준
Archives
- Today
- Total
체인의정석
node.js) mysql2를 사용하여 db query, insert 하는 코드 본문
728x90
반응형
node.js에서 mysql2를 사용하여 상호작용 하는 코드는 다음과 같다.
const mysql = require('mysql2');
const { logger } = require('./logger');
require("dotenv").config();
const MYSQL_HOST = process.env.MYSQL_HOST
const MYSQL_PORT = process.env.MYSQL_PORT
const MYSQL_DATABASE = process.env.MYSQL_DATABASE
const MYSQL_USER = process.env.MYSQL_USER
const MYSQL_PASSWORD = process.env.MYSQL_PASSWORD
// Promisify the connection.query method
function queryPromise(connection, sql, args) {
return new Promise((resolve, reject) => {
connection.query(sql, args, (err, results, fields) => {
if (err) {
return reject(err);
}
resolve({ results, fields });
});
});
}
// Function to create and return a new MySQL connection
async function createConnection() {
// console.log(MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE)
const connection = mysql.createConnection({
host: MYSQL_HOST,
port: MYSQL_PORT,
user: MYSQL_USER,
password: MYSQL_PASSWORD,
database: MYSQL_DATABASE
});
return new Promise((resolve, reject) => {
connection.connect(err => {
if (err) {
logger.error('mysql.js connection : ', err);
reject(err);
} else {
resolve(connection);
}
});
});
}
async function closeConnection(connection) {
try {
connection.end();
} catch (error) {
logger.error('mysql.js closeConnection : ', error);
console.error(error);
throw error;
}
}
async function isConnected(connection) {
if (connection === undefined) {
return new Promise((resolve, reject) => {
resolve(false);
});
}
return new Promise((resolve, reject) => {
connection.query('SELECT 1', (err) => {
if (err) {
resolve(false);
} else {
resolve(true);
}
});
});
}
module.exports = {
queryPromise,
createConnection,
closeConnection,
isConnected,
};
참고로 로깅 및 환경 변수 설정의 경우 아래 포스팅을 참고하면 된다.
https://it-timehacker.tistory.com/531
먼저 DB를 사용할 때는
const connection = await createConnection();
//쿼리를 사용해서 CRUD를 하는 부분, connection 을 넘겨주고 따로 쿼리들만 모아서 빼둔 파일에서 가져와서 사용
await closeConnection(connection);
다음과 같이 하나의 개별 프로세스에서 DB와 상호작용하는 첫 부분에서는 createConnection을 해두고 상호작용이 모두 일어나고 나서는 closeConnection을 해준다. 만약 DB에 접근해서 해야하는 작업이 여러개라면 connection을 열고하고 작업이 다 끝났다면 다음 DB접근 로직까지는 closeConnection을 해주는것이 필요하다.
const find_db_res = await find_by_key(connection, key);
위와 같이 쿼리를 따로 빼둔 함수에다가 connection과 쿼리에 필요한 키 값등을 넘기는 식으로 접근을 하면 된다.
const find_by_key = async(connection, key) => {
const sql_search = `
select res1, res2 from ${MYSQL_DATABASE}.t_transaction where key = '${key}';
`
const getReqTxId = await queryPromise(connection, sql_search);
if(getReqTxId.results.length==0) {
logger.error("[query.js] request id of fromTxHash not exist");
throw Error("[query.js] request id of fromTxHash not exist");
}
const res1 = getReqTxId.results[0].res1;
const res2 = getReqTxId.results[0].res2;
return {res1, res2};
}
이런식으로 접근하면 된다.
저장하는 쿼리의 예시의 경우 아래와 같다.
const insert_db = async(
connection, val1, val2, val3
) => {
const query = `INSERT INTO ${MYSQL_DATABASE}.t_request_tx
(
val1, val2, val3, updated_at
)
VALUES
(
?,?,?,NOW()
)
`
const values = [
val1, val2, val3
]
try {
const res_db = await queryPromise(connection,query,values);
return res_db;
} catch (error) {
logger.error(`[query.js] error ${error} occued from query ${query}, values ${values}`)
throw Error("[query.js] insert_request_tx_send error : ", error);
}
}
위와 같이 INEST의 VALUE값 안에 직접 NOW()를 입력하면 현재 시간 기준으로 데이터베이스에 시간이 찍히게 되며, 마찬가지로
connection이 열렸을 때 await insert_db(connection, val1, val2, val3 ) 이런식으로 한줄을 더 추가해주면 된다.
728x90
반응형
'개발 > backend' 카테고리의 다른 글
node.js에서 VRF 만들기 (node-ecvrf, drand-client 사용) (0) | 2024.11.29 |
---|---|
node.js) UTC 시간 기준으로 날짜를 저장하는 방법, blocktimestamp로 부터 UTC시간 도출하는 방법 (0) | 2024.11.21 |
node.js) dotenv를 이용한 환경변수 분리 및 winston을 이용한 logger 만들기 (0) | 2024.11.21 |
winston으로 백엔드 로그 관리하기 (1) | 2024.09.04 |
주기적으로 재시작 하는 node.js 프로그램 만들기 (pm2 ecosystem, crone) (1) | 2024.07.05 |
Comments