TypeORM의 풀링(데이터베이스 연결기능)과 raw query이용하기, 데이터베이스는 mysql사용
🥕 TypeORM설치
npm install mysql2 # typeorm-mysql 연동을 도와주는 드라이버
npm install typeorm
typeorm을 먼저 설치하면 ER_NOT_SUPPORTED_AUTH_MODE에러가 날 수 있다.
mysql2먼저 설치하기!
🥕 dotenv 설정
데이터베이스 관련 환경변수를 관리하기 위해 dotenv를 사용한다.
dotenv 설치
npm install dotenv #dotenv 설치
프로젝트 루트경로에 .env파일 생성후 환경변수 저장
// .env파일
TYPEORM_CONNECTION = mysql
TYPEORM_HOST = 127.0.0.1
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = 비밀번호
TYPEORM_DATABASE = typeorm_prac
TYPEORM_PORT = 3306
TYPEORM_LOGGING = TRUE
환경변수는 string으로 들어가는데 =뒤에는 전부 ""를 붙이거나 전부 안붙여야 한다.
typeorm_prac데이터베이스는 미리 만들어놓기
mysql> create database typeorm_prac character set utf8mb4 collate utf8mb4_general_ci;
환경변수 불러오기
.env에 저장해놓은 프로젝트 환경변수를 사용하기 위해 불러온다.
// app.js
const dotenv = require('dotenv');
dotenv.config(); // 아니면 한줄로 require('dotenv').config();
console.log(process.env); 로 잘 불러오는지 확인해볼 수 있다. 내 컴퓨터 내 환경변수와 방금 추가한 프로젝트 내부 환경변수를 전부 불러온다. 제대로 되지 않았다면 전역변수만 불러옴
(process객체는 node.js의 기본 글로벌 객체이다. require없이 모든 모듈에 접근이 가능하다.그중 환경변수가 담겨있는 .env객체에 접근해서 환경변수를 가져왔다.)
🥕 TypeORM-DataSource로 db와 앱 연결
환경변수 이용해서 typeorm-db연결
typeorm의 DataSource를 이용한다.
// db연결 환경세팅
const { DataSource } = require('typeorm');
const myDataSource = new DataSource({
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: process.env.TYPEORM_PORT,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE
});
// 실제 연결은 initialize메소드 사용
myDataSource.initialize();
typeorm의 DataSource는 애플리케이션 코드랑 데이터베이스를 연결시켜주는 역할을 한다.
DataSource를 이용해서 내가 사용할 db(아까 만든거)랑 연결이 되는 myDataSource라는 인스턴스를 만들고,
인스턴스의 Initialize메소드를 이용하면 실제로 연결이 된다.
* 잘 연결되었는지 확인하는법
myDataSource.initialize().then(()=>{
console.log("success")
}).catch(()=>{
console.log("fail")
});

잘 연결이 되면 success, 아니면 fail이 출력된다.
🥕 쿼리 날려보기
데이터베이스와 연결된 myDataSource의 query메소드를 이용한다.
myDataSource.query('SQL쿼리문');
db조회
현재 typeorm_prac에 아무 것도 없어서
저번에 만든 justgram데이터베이스에 연결을 하고 users테이블에 있는 데이터들을 가져와보기
.env파일에서 연결 데이터베이스 이름을 바꿔주고
// app.js
myDataSource.initialize().then(()=>{
console.log("success")
const queryRes = myDataSource.query('select * from users'); //쿼리의 결과 (queryRes)는 비동기로 오기때문에
queryRes.then((value) => { // 여기서 .then()이용
console.log(value); //출력해서 확인해보기
});
}).catch(()=>{
console.log("fail");
});

데이터입력
데이터 입력은 보통 요청으로 오는 값을 가지고 입력하게 되는데 변수를 넣어주려면
.query()의 괄호 안에 백틱``으로 쿼리문을 적고 입력값을 ?로 한다. 그리고 뒤에다가 ,를 하고 배열로 값을 적어주면 된다.
myDataSource(`SQL문, 변수는 ?로 적는다`, [변수1, 변수2,...]);
myDataSource.initialize().then(()=>{
console.log("success");
const nickname = "테스트";
const email = "test@test.com";
const password = "testpassword";
myDataSource.query(`
insert into users (email, nickname, password)
values (?, ?, ?)`,
[nickname, email, password])
});

'TIL' 카테고리의 다른 글
| node.js | express, TypeORM 적용한 CRUD API만들기 - 2 API작성 (0) | 2022.10.02 |
|---|---|
| node.js | express, TypeORM 적용한 CRUD API만들기 - 1 db(dbmate) (0) | 2022.10.02 |
| LeetCode | 009. Palindrome Number (0) | 2022.09.28 |
| node.js | 인스타그램: 데이터베이스 구축 (0) | 2022.09.27 |
| node.js | express로 서버 만들기 - 게시글 등록, 목록조회(DB x) (0) | 2022.09.27 |