sequelize1

ORM?

  • Object relation Mapping
  • 어플리케이션과 db를 맵핑 시켜주는 도구
  • 특정 DBMS에 종속되지 않음

개발환경 셋팅

환경 : intellij, mysq (visual studio code에서도 가능)

시작전 셋팅 필요 : 로컬mysql디비 필요
https://beanbroker.github.io/2018/08/21/etc/docker_mysql/

intellij 셋팅
-> new project, node
-> 프로젝트 생성후
-> Preference 열기
-> javascript검색
-> Languages & Frameworks의 javascript Language Version변경 EcmaScript6로(그래야 람다를 써도 빨간줄이 뜨지 않는다!)

[참고]
http://docs.sequelizejs.com/manual/installation/getting-started.html 참고

project setting

app.js

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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 app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {

res.status(err.status || 404);
res.send('404 not found');


});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
res.render('error');
});

module.exports = app;

routes 폴더

/routes/index.js

1
2
3
4
5
6
7
8
9
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});

module.exports = router;

/routes/users.js

1
2
3
4
5
6
7
8
9
var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});

module.exports = router;

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"name": "nodetestproject",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"express": "~4.16.0",
"http-errors": "~1.6.2",
"jade": "~1.11.0",
"morgan": "~1.9.0"
}
}

3005 포트 사용 app.js에 추가

1
2
3
app.listen(3005, function(){
console.log('3005 port connected');
});

http://docs.sequelizejs.com/manual/installation/getting-started.html를 보면 아래와 같이 나와있다.

1
2
3
4
5
6
7
8
// Using NPM
$ npm install --save sequelize

# And one of the following:
$ npm install --save pg pg-hstore
$ npm install --save mysql2
$ npm install --save sqlite3
$ npm install --save tedious // MSSQL

실제 install에 필요한 부분

1
2
3
4
5
6
7
$ npm install --save sequelize
$ npm install --save mysql2

위의 부분 실행 후

npm i -g sequelize-cli
sequelize init

sequelize init을 진행하게되면

  1. /config
  2. /models
  3. /migirations
    폴더 생성이 되어진다 migrations는 필요없다.

/config/config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"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"
}
}

위의 내용을 자신의 디비에 맞게 변경하자

1
2
3
4
5
6
7
8
"development": {
"username": "root",
"password": "password",
"database": "study",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases" : false
}

/models/index.js기본 생성되어진 index.js변경

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

'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;

Mysql을 연결해보자

app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const sequelize = require('./models').sequelize;


//테스트 커낵션
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});


sequelize.sync();

sync - > 서버실행시 mysql 연결 및 연동

Executing (default): SELECT 1+1 AS result
Connection has been established successfully. 와 함께 로그가 확인되면 정상연결 확인.