바르고 뜨겁게
[nodeJS] 시퀄라이즈(sequelize) 본문
시퀄라이즈(sequelize)
SQL문법 대신 JavaScript로 대체할 수 있는 ORM
npm i sequelize mysql2
// 시퀄라이즈는 명령프롬프트에서 바로 사용하는 방식(커맨드라인인터페이스)을 지원함
npm i -g sequelize-cli
// 시퀄라이즈 환경 초기화
sequelize init
데이터베이스 스키마 생성
sequelize db:create
models/index.js
시퀄라이즈의 메인 파일models/
아래 자바스크립트들은 테이블과 1:1 대응된다config/config.json
시퀄라이즈 설정 파일
시퀄라이즈로 데이터베이스 만들기
시퀄라이즈 설정
config/config.json
{
"development": {
"username": "root",
"password": "1234",
"database": "nodetestdb",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases: ": false
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
models/
아래 자바스크립트들은 테이블과 1:1 대응된다
테이블 생성
models/user.js
module.exports = (sequelize, DataTypes) => {
return sequelize.define('user', {
});
};models/index.js
db.Sequelize = Sequelize;
db.sequelize = sequelize;
// [user.js]의 module.exports = (sequelize, DataTypes) 매개변수랑 이어진다.
db.User = require('./user')(sequelize, Sequelize);
테이블 정의
models/user.js
module.exports = (sequelize, DataTypes) => {
return sequelize.define('user', {
name: {
type:DataTypes.STRING(20), // 자료형
allowNull: false, // 널허용 여부
unique: true, // 프라이머리키
},
age:{
type: DataTypes.INTEGER.UNSIGNED, // 절대값
allowNull: false,
},
married: {
type: DataTypes.BOOLEAN,
allowNull: false,
},
comment: {
type: DataTypes.TEXT,
allowNull: true,
},
created_at: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: sequelize.literal('now()'),
}
}, {
timestamps: false, // 타임스탬프 사용여부
underscored: true, // snake case(true) / camle case(false) 권장 여부
paranoid: true, // 삭제일
});
};module.exports = (sequelize, DataTypes) => {
return sequelize.define('comment.js', {
/// 관계가 있을땐 컬럼을 적지 않고
/// index.js 에서 관계를 적어준다
// commenter:{
// type : DataTypes.STRING(20),
// allowNull: false,
// unique: true,
// },
comment: {
type: DataTypes.STRING(100),
allowNull: false,
},
create_at:{
type: DataTypes.DATE,
allowNull: false,
defaultValue: sequelize.literal('now()')
}
},{
timestamps: false, // 타임스탬프 사용여부
underscored: true, // snake case(true) / camle case(false) 권장 여부
});
};models/index.js
const path = require('path');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development'
const config = require('../config/config.json')[env]; // config.json의 development 부분을 불러온다
const sequelize = new Sequelize(config.database, config.username, config.password, config);
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.User = require('./user')(sequelize, Sequelize);
db.Comment = require('./comment')(sequelize, Sequelize);
// 관계 형성 , commenter 컬럼 , 참조키
db.User.hasMany(db.Comment, { foreignKey: 'commenter' , sourceKey: 'id'});
db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id'});
module.exports = db;app.js
랑 연결서버가 시작할때 테이블이 만들어진다.
var { sequelize } = require('../models');
sequelize.sync();
'자바스크립트 > Node Js' 카테고리의 다른 글
[nodeJS] 노드 보안 처리 dotenv (0) | 2019.01.22 |
---|---|
[nodeJS] 노드 보안 처리 dotenv (0) | 2019.01.21 |
[NodeJS] 템플릿 뷰 엔진 PUG (0) | 2019.01.11 |
[NodeJS] express 프레임워크 (0) | 2018.12.31 |
[NodeJS] npm 명령어, 생성, 설치, 배포 (0) | 2018.12.29 |
Comments