Wecode - Foundation 1 (부트캠프)/Westagram (Mysql, Node.js, Express)

[Express 초기 환경세팅] 2. database 서버 연결- dbConnection 설정

JBS 12 2023. 9. 4. 22:04

-Westagram Backend Project -

  1. TypeORM 설치 및 적용
  2. dbConnection 정상 작동 확인

아래 링크에서 진행했던 TypeORM 설치에서 이어져서, 

 

[Express 초기 환경세팅/ TypeORM 설치] **(주황색)

-Westagram Backend Project - 1. Express 초기 환경 설정 Express 설치 / 적용 nodemon 설치 / 적용 cors 설치 / 적용 dotenv 설치 / 환경 변수 적용 morgan 설치 / 적용 https://www.notion.so/wecode/Node-Express-da9ab2a0a3a64f75aedb1723

pm-developer-justdoit.tistory.com

 

dbConnection 설정

 

 

dbConnection 정상 작동 확인 :  백엔드 백백엔드 연결 

 

 

github > wecode_server > app3withDB.js 에서 파일을 가져와서, 연결 


dotenv(.env)를 사용할 수 있게 다음의 명령어를 작성 --- app3.js에 .env 연결 

const dotenv = require("dotenv") dotenv.config()

 

Dotenv 파일(.env) 내 환경변수 설정법 / .env 파일을 vscode에 따로 만들어서 이 코드를 따로 뺀다 (.env 파일에 아래 코드 넣기)

TYPEORM_CONNECTION = mysql
TYPEORM_HOST = 127.0.0.1
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = myPassword (mysql 로그인 비밀번호 적기)
TYPEORM_DATABASE = mysql로 만든 데이터베이스 이름 적기
TYPEORM_PORT = 3306
TYPEORM_LOGGING =TRUE 

 

 

이게 mysql로 database 가져오는거/ typeorm을 DataSource 모듈을 불러옵니다

const { DataSource } = require('typeorm');

.env 파일에 저장해놓은 환경 변수들을 불러와 DataSource 명령어를 통해서 db와의 커넥션 환경 세팅을 완료합니다.(vscode에 작성 코드)

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()
.then(() => {
console.log("Data Source has been initialized!")
})

 

express app 으로 서버를 만듭니다.

const server = http.createServer(app) 

 
 서버를 시작하는 함수
const start = async () => {
try {
server.listen(8000, () => console.log(`Server is listening on 8000`))
} catch (err) {
console.error(err)
}
}

start()

 

나머지는 원래 코드 

const http = require('http')
const express = require('express')


const app = express()

app.use(express.json()) // for parsing application/json

app.get("/", async(req, res) => {
try {
return res.status(200).json({"message": "Welcome to Soheon's server!"})
} catch (err) {
console.log(err)
}
})

const dotenv = require("dotenv")
dotenv.config()

const http = require('http')
const express = require('express')

// 이게 mysql로 database 가져오는거
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
})

myDataSource.initialize()
.then(() => {
console.log("Data Source has been initialized!")
})
 
 



const app = express()

app.use(express.json()) // for parsing application/json

//서버 띄우는 get
app.get("/", async(req, res) => {
try {
return res.status(200).json({"message": "Welcome to Soheon's server!"})
} catch (err) {
console.log(err)
}
})

//과제2
// user 가져오는 get
//1. API 로 users 화면에 보여주기
//get 안의 첫번째 인자가 url --> 맨 밑의 server.listen 첫 인자 8000 -> localhost:8000/users
app.get('/users', async(req, res) => {
try {
// query DB with SQL
// Database Source 변수를 가져오고.
// SELECT id, name, password FROM users;
const userData = await myDataSource.query(`SELECT id, name, email FROM USERS`)

// console 출력
// 서버 화면에 띄우는 거 (javascript는 화면에 띄우려면 console.log 띄어야하니/ . 있으면 다 js연결)
console.log("USER DATA :", userData)

// consolelog로 띄우는 게 FRONT 전달

// 함수 있으니까 반환
return res.status(200).json({
"users": userData
})
} catch (error) {
console.log(error)
}
})
//2. users 를 post로 생성, /users -> mysql의 users table에 생성
app.post("/users", async(req, res) => {
try {
// 1. user 정보를 frontend로부터 받는다. (프론트가 사용자 정보를 가지고, 요청을 보낸다) -> postman body에 받는다
const me = req.body

// 2. user 정보 console.log로 확인 한 번!
console.log("ME: ", me)

 
// 3. DATABASE 정보 저장.
// body에서 빈 창에 데이터 자세하게 적고, 여기로 와서 양식 쓰기
const name2 = me.name
const password2 = me.password
const email2 = me.email

const userData = await myDataSource.query(`
INSERT INTO users (
name,
password,
email
)
VALUES (
'${name2}',
'${password2}',
'${email2}'
)
`)

// 4. DB data 저장 여부 확인
console.log('inserted user id', userData.insertId)

// 5. send response to FRONTEND
return res.status(201).json({
"message": "userCreated"
})

} catch (err) {
console.log(err)
}
})






// 과제 3 DELETE
// 가장 마지막 user를 삭제하는 엔드포인트
app.delete("/users", async(req, res) => {
try {

} catch (err) {
console.log(err)
}
})



// 과제 4 UPDATE
// 1번 user의 이름을 'Code Kim'으로 바꾸어 보세요.

app.put("/users/1", async(req, res) => {
try {
const newName = req.body.data.name
} catch (err) {
console.log(err)
}
})



myDataSource.initialize()
.then(() => {
console.log("Data Source has been initialized!")
})



const server = http.createServer(app) // express app 으로 서버를 만듭니다.

const start = async () => { // 서버를 시작하는 함수입니다.
try {
server.listen(8000, () => console.log(`Server is listening on 8000`))
} catch (err) {
console.error(err)
}
}

start()


 

 

 

그리고 터미널에서 node [파일이름].js로 실행시켜서 

아래와 같이 intialized! 가 나오면 서버 연결 된 거다! 

다시 여기에 치려면 ctrl+c로 연결 끊고 다시 쳐야 함   (맥북도 command아닌 ctrl)

그리고 또 다시 node 실행 시키고 (node [파일이름].js로)