티스토리 뷰
[환경]
비주얼 코드
DB: postgreSQL
서버 : express 모듈
Sequelize : DB 작업을 쉽게 하게 해주는 ORM 라이브러리. 프라미스 기반이라 비동기 로직 작성에 유리하다.
(ORM (Object Relational Mapping) : 자바스크립트 객체와 관계형 데이터 베이스를 쿼리 없이 서로 연결 )
[설치 ]
- 콘솔에 명령문 실행
npm init
npm i express morgan sequelize sequelize-cli postgres pg
npm i -D nodemon
npx sequelize init
(다른 필요한 미들웨어와 노드문(: 변경을 자동으로 반영)도 같이 설치하였다.)
[DB 데이터 베이스 생성]
- 콘피그 확인
>>>pgAdmin
- DB에 database에 설정한 이름과 같은 데이터베이스가 필요하다.
[postgreSQL연동]
>>code
- 콘피그 정보 수정 : DB와 일치시킨다!
- package.json : 실행 명령문 추가 (노드 문 모듈 )
콘솔에 npm start 하면 실행된다. 디버그 눌러도 실행됨.
[시큘라이즈로 DB와 연결]
- 코드 수정
> modles>index.js
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
db.sequelize = sequelize;
module.exports = db;
> app.js
const express = require('express')
const path = require('path')
const morgan = require('morgan')
const {sequelize} = require('./models')
const app = express()
app.set('port',process.env.PORT || 3001)
sequelize.sync({force: false})
.then(()=>{
console.log('데이터베이스 연결성공');
})
.catch((err)=>{
console.error(err);
})
app.use(morgan('dev'))
app.use(express.static(path.join(__dirname,'public')))
app.use(express.json())
app.use(express.urlencoded({extended:false}))
app.use((req,res,next)=>{
const error = new Error(`${req.method}${req.url} 라우터가 없습니다`)
error.status = 404
next(error)
})
app.use((err,req,res,next)=>{
res.locals.message = err.message;
res.locals.error = process.env.NODE_ENV !=='production' ? err : {}
res.status(err.status || 500)
res.render('error')
})
app.listen(app.get('port'),()=>{
console.log(app.get('port'),'번 포트에서 대기중');
})
[sequelize로 DB에 테이블 생성하기]
> department.js 작성
(department는 테이블 이름이다. 클래스를 생성해준다. 컬럼의 요소들의 속성도 설정해줄 수 있다.)
const Sequelize = require('sequelize')
module.exports = class Department extends Sequelize.Model {
static init(sequelize) {
return super.init({
name: {
type: Sequelize.STRING(50)
},
code: {
type: Sequelize.STRING(50)
},
description: {
type: Sequelize.TEXT
}
}, {
sequelize,
timestamps: true,
underscored: false,
modelName: 'Departments',
tableName: 'departsments',
paranoid: false,
charset: 'utf8',
collate: 'utf8_general_ci'
})
}
static associate(db) {
db.Department.hasMany(db.User, { foreignKey: 'departmentId', sourceKey: 'id'})
}
}
(user.js)
const Sequelize = require('sequelize')
module.exports = class User extends Sequelize.Model {
static init(sequelize) {
return super.init({
name: {
type: Sequelize.STRING(100),
},
userid: {
type: Sequelize.STRING(255),
unique: true,
allowNull: false
},
password: {
type: Sequelize.STRING(500),
allowNull: false
},
role: {
type: Sequelize.STRING(20),
},
email: {
type: Sequelize.STRING(255)
},
phone: {
type: Sequelize.STRING(255)
},
updated_pw_date: {
type: Sequelize.DATE
},
}, {
sequelize,
underscored: true,
timestamps: true,
paranoid: false,
charset: 'utf8',
collate: 'utf8_general_ci'
})
}
static associate(db) {
db.User.belongsTo(db.Department, { foreignKey: { name: 'departmentId', onDelete: 'SET NULL' }})
db.User.hasMany(db.Device, {
foreignKey: { name: 'userId', onDelete: 'SET NULL' }
})
}
}
(deparment는 user의 부서와 연결시킬 것이라, associate로 연결해주었다.)
> models >index
:department 추가해준다. index는 각각의 테이블을 모아주는 역할
const Sequelize = require('sequelize');
const Department = require('./department')
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
db.sequelize = sequelize;
db.Department = Department
Department.init(sequelize)
module.exports = db;
- DB에 부서 테이블 완성됨. : 코드 실행하면 테이블 생긴다.
라우터 관리 : 부서 페이지에서 할 일 결정
> route > department
const { Router } = require('express')
const express = require('express')
const { Department } = require('../models')
const { sync } = require('../models/department')
const route = express.Router()
Router.route('/')
.get(async(req,res,next)=>{
const department = await Department.findAll() //테이블에 뭐 들어있는지 다 가져와
res.json(department)//객체로 값 전달되기 떄문에 json으로 받아온다,
})
.post (async (req,res,next)=>{
const {name, code, description} = req.body// id랑 등등은 자동이라 이것만 중요
const department = await Department.create({
name,
code,
description
})//(db한테 원격으로query 날림 디비에 데이터 들어감)대신에 바로 시퀄라이져로 보내버림
console.log('성공');
})
- cmd 콘솔에서 실행시키기
cd 폴더경로
npm init
npm install //모듈 다운 안 받아져 있을 경우만
npm start //보통의 경우 이것만 해주면 된다
서버 실행 확인한다.
'Web > Backend_서버구현하기' 카테고리의 다른 글
로그인을 위한 백엔드 서버_DB : Table모델생성 (0) | 2022.03.24 |
---|---|
로그인을 위한 백엔드 서버_DB 연동 (0) | 2022.03.24 |
로그인을 위한 백엔드 서버_라이브러리 설치 (0) | 2022.03.24 |
로그인을 위한 백엔드 서버 구현 시작 (0) | 2022.03.24 |
[Postman]DB 수정 (0) | 2022.02.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- node.js
- AI
- ardity
- 유니티플러그인
- motor controll
- DeepLeaning
- Java
- Arduino
- StableDiffusion
- three.js
- RNN
- Unity
- colab
- docker
- MQTT
- 라즈베리파이
- TouchDesigner
- opencv
- emotive eeg
- 후디니
- Python
- oculuspro
- CNC
- sequelize
- houdini
- VR
- Express
- unity 360
- 유니티
- JacobianMatrices
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함