반응형
⌗ 콘솔
- sequelize 커맨드를 사용하기 위해 sequelize-cli 를 전역으로 설치 및 초기화
$ npm i
$ npm i sequelize mysql2
$ npm i -g sequelize-cli
$ sequelize init
models/index.js
'use strict';
const path = require('path');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
- sequelize-cli가 자동으로 생성하는 코드는 에러가 발생해 다음과 같이 수정해야함 (기본설정)
⌗ MySQL 연결
app.js
...
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var commentsRouter = require('./routes/comments');
var sequelize = require('./models').sequelize;
var app = express();
// Sequelize connect
sequelize.sync();
...
- sequelize.sync();
- sync 메서드를 사용하면 서버 실행시 알아서 MySQL과 연동
config/cofing.json
{
"development": { //배포 환경
"username": "root",
"password": null,
"database": "nodejs",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false, //보안에 취약한 연산자를 사용할지 여부
"logging" : false //시퀄라이즈가 수행하는 SQL문이 로그에 노출되는 여부
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}
}
- development.password 와 development.database를 현재 MySQL 커넥션과 일치
- test와 product은 각각 테스트 용도와 배포 용도로 사용
⌗ 모델 정의
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,
});
};
models/comment.js
module.exports = (sequelize, DataTypes) => {
return sequelize.define('comment', {
comment: {
type: DataTypes.STRING(100),
allowNull: false,
},
created_at: {
type: DataTypes.DATE,
allowNull: true,
defaultValue: sequelize.literal('now()'),
},
}, {
timestamps: false,
});
};
⌗ 모델 연결
models/index.js
'use strict';
const path = require('path');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.User = require('./user')(sequelize, Sequelize);
db.Comment = require('./comment')(sequelize, Sequelize);
//db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
//db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' });
module.exports = db;
- db.User = require('./user')(sequelize, Sequelize);
- db.Comment = require('./comment')(sequelize, Sequelize);
반응형
'Javascript > NodeJS' 카테고리의 다른 글
[NodeJS] Window10 환경, bcrypt 설치 오류 해결 (0) | 2019.11.16 |
---|---|
[NodeJs] Unhandled rejection SequelizeConnectionError 오류 해결 (0) | 2019.11.16 |
[NodeJs] 웹 서버 커스터마이징 설정 (0) | 2019.11.16 |
[NodeJs] 기본 개념 (0) | 2019.11.16 |