2. Node 가계부 만들기 [ .env 파일 사용, Mysql Sequlize 연결, Mysql 동기화 ]
2022. 5. 23. 11:21ㆍ프로젝트/가계부 - 제작 JavaScript
1. package.json 실행 스크립트 생성
script에 실행 스크립트를 작성
"scripts": {
"start": "node ./app.js"
}
2. app.js (dotenv) 사용, .env 파일 생성
.env 설정 : https://crispypotato.tistory.com/86
2-1. .env 파일 생성
.env 파일 내용
//cors 설정 url
CORS=http://localhost:8080
//노드 환경변수
NODE_ENV=local
DB_NAME=DB 계정 이름
DB_PASSWORD= DB 비밀 번호
DB=DB 이름
//jwt 키 값
JWT=sfnlfgjsdfhgh348hturhkjdsnfg@&^&(%&fdjhlshfdkjghkjdfhkjgshrtgh)
3. Sequlize 세팅
3-1. models 폴더 생성, js 파일 생성
3-2. Sequlize 코드 작성
1. models/index.js 코드 작성 ( Mysql => Sequlize 연결 )
const { Sequelize } = require('sequelize')
//.env 설정 값
const name = process.env.DB_NAME
const password = process.env.DB_PASSWORD
const DB = process.env.DB
const config = {
username: name,
password,
database: DB,
host: 'localhost',
dialect: 'mysql'
}
//sequlize 연결
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
{
username: name,
password,
database: DB,
host: config.host,
dialect: config.dialect,
// timezone 는 Mysql 시간을 한국 타임존으로 변경이 가능하다
timezone: '+09:00'
}
)
//sequlize 데이터 타입
const DataTypes = Sequelize.DataTypes
module.exports = { sequelize, DataTypes }
2. models/user.js 생성
const { sequelize, DataTypes } = require('./index')
// 가계부 외래키 설정
const Accounts = require('./accountlist')
const Users = sequelize.define(
'user',
{
index: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
id: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
password: {
type: DataTypes.STRING,
allowNull: false
},
salt: {
type: DataTypes.STRING,
allowNull: false
}
},
{
sequelize,
timestamps: true,
freezeTableName: true,
tableName: 'users'
}
)
// 가계부 외래키 설정
Users.hasOne(Accounts, {
sourceKey: 'index',
foreignKey: 'userIndex',
onDelete: 'CASCADE'
})
module.exports = Users
3. models/accountList.js 생성
const { sequelize, DataTypes } = require('./index')
const Accounts = sequelize.define(
'account',
{
index: {
type: DataTypes.INTEGER,
allowNull: false,
autoIncrement: true,
primaryKey: true
},
userIndex: {
type: DataTypes.INTEGER,
allowNull: false
},
bigCategory: {
type: DataTypes.STRING,
allowNull: false
},
smallCategory: {
type: DataTypes.STRING
},
card: {
type: DataTypes.STRING,
allowNull: false
},
cost: {
type: DataTypes.INTEGER,
allowNull: false
},
date: {
type: DataTypes.STRING,
allowNull: false
}
},
{
sequelize,
timestamps: true,
freezeTableName: true,
tableName: 'accounts'
}
)
module.exports = Accounts
4. app.js ( Sequlize 동기화 코드 ) 작성
1. app.js 일부 ( Sequlize 동기화 코드 ) node 환경 변수가 'local' 일 때 동기화를 진행
//....
const { sequelize } = require('./models/index')
//node 환경 변수가 'local일 때 동기화를 진행
//product 서버에서 갑자기 디비 구조가 변경되면 에러 대응하기 힘들기 때문
if (process.env.NODE_ENV === 'local') {
sequelize
.sync()
.then(() => {
console.log('성공')
})
.catch((err) => {
console.log('실패')
console.log(err)
})
}
//....
2. 전체 app.js 파일
require('dotenv').config()
const express = require('express')
const logger = require('morgan')
const compression = require('compression')
const { sequelize } = require('./models/index')
if (process.env.NODE_ENV === 'local') {
sequelize
.sync()
.then(() => {
console.log('성공')
})
.catch((err) => {
console.log('실패')
console.log(err)
})
}
const app = express()
app.use(compression())
app.use(logger('dev'))
app.use(express.json())
app.listen(3000, () => {
console.log('server start!')
})
728x90
반응형
'프로젝트 > 가계부 - 제작 JavaScript' 카테고리의 다른 글
5. Node 가계부 만들기 [ 유저 기능 (회원 가입) 필요 함수 구현 ] - 2 (0) | 2022.05.28 |
---|---|
4. Node 가계부 만들기 [ 유저 기능 (회원 가입) 구현 ] - 1 (0) | 2022.05.28 |
3. Node 가계부 만들기 [ 데이터 / Error 전송 포맷 설정 함수 생성, http-errors 사용, Error 핸들러 ] (0) | 2022.05.23 |
1. Node 가계부 만들기 [ 필요 파일/라이브러리 생성, 설치] (0) | 2022.05.22 |
0. Node 프로젝트 가계부 만들기 소개 (0) | 2022.05.22 |