Sequelize
- javascript 구문을 알아서 SQL로 변환
- DB 작업을 쉽게 할 수 있도록 도와주는 ORM (Object-Relation Mapping) 라이브러리 중 하나
- Sequelize 공식 문서
Sequelize 설치
npm install sequelize sequelize-cli mysql2
npx sequelize init
Sequelize MVC
- Model : 모델 (테이블) 정의
- Controller : 데이터 CRUD, 렌더링 등의 작업
- View : 화면에 보여줌
Sequelize 모델 정의
- mysql에서 정의한 테이블을 sequelize에서도 정의 필요 → mysql 테이블과 sequelize 모델 대응
const model = Sequelize.define(
"visitor",
{
...
},
{
...
}
);
-
인자 2 : 컬럼 정의
- type : 데이터 타입 정의 (문자, 숫자, 날짜 등)
- primaryKey : 기본키 설정 (default : false)
- autoIncrement : 숫자 자동 증가 (default : false)
- allowNull : Not Null 허용 여부 (default : true)
- comment : column에 대한 설명
- validate : 데이터 유효성을 검사하는 속성
-
인자 3 : 모델의 옵션 정의 (선택)
- charset : "utf8"
- collate : "utf8_general_ci"
- tableName : 테이블 이름 설정 (실제 DB에 생성될 테이블명, 모델 이름과 다름)
- freezeTableName : true로 설정하면, 이름이 복수형으로 생성되지 않음
(모델명을 user로 설정해도 sequelize를 실행할 경우, users 테이블이 생성됨)
- timestamps : 기본 설정은 true
DB sync
db.sequelize.sync({ force: true }).then(() => {
app.listen(PORT, () => {
console.log(`http://localhost:${PORT}`);
});
});
- force: true → 항상 테이블을 삭제 후, 재생성
- force: false (default) → 테이블 존재하면 pass, 없으면 생성
Sequelize query문
- Promise 반환 → .then( )을 붙여서 결과값 사용 가능
findAll( )
- SELECT
- 배열 반환 (배열에 담긴 값은 객체)
findOne( )
create( )
update( )
destroy( )
💥 where문의 조건은 항상 객체 형태로 만들어야 함
const profile = (req, res) => {
User.findOne({
where: { id: req.params.init },
});
};