sequelize3

셋팅하기

2장에 이어서 직접 콜을 때려서 디비에 접근해보겠습니다

app.js

1
2
3
4
5
6
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');


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

/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.send('index page');
});

module.exports = router;

웹브라우저에서 http://localhost:3005/
-> index page

정상출력 확인

/routes/

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 user');
});

module.exports = router;

웹브라우저에서 http://localhost:3005/users
-> respond with a user

정상출력 확인

CRUD

crud에 앞서 컴퓨터 재시작하여 도커에 올린 디비가 연결이 안된다면

1
2
docker restart 'CONTAINER ID'
재기동

/routers/user.js

1
const User = require('../models').User;

추가! orm모델사용!

Create

  • 준비사항
    1. npm install body-parser -save 후
      package.json확인
    2. postman설치 (사용방법은 구글에 많음)

app.js

1
2
3
4
5
const bodyParser = require('body-parser');

app.use(express.urlencoded({ extended: false }));

app.use(bodyParser.json());

위의 2개 다 추가

/routes/users.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
router.post('/', (req,res,next) => {
User.create({
name : req.body.name,
age : req.body.age,
gender : req.body.gender,

})
.then((result) => {
console.log(result);
console.log('finish to create');
res.status(201).json(result);
})
.catch((err => {
console.error(err);
res.send(err);
}));

});

추가 후 run

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Url - http://localhost:3005/users/
method - post
req
{
"name" : "특정인물",
"age" : 53,
"gender" : 0

}
res
{
"id": 35,
"name": "특정인물",
"age": 53,
"gender": false
}

Read

Create한 부분을 읽어보자!

/routes/users.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'use strict'
const express = require('express');
const router = express.Router();

const User = require('../models').User;

router.get('/:id', function(req, res, next) {
User.findById(req.params.id)
.then((user) => {
console.log(user);
console.log('finish to findById');
res.json(user);
})
.catch((err => {
console.error(err);
res.send(err);
}));
});

추가 후 run

1
2
3
4
5
6
7
8
9
10
11
12
Url - http://localhost:3005/users/35
method - get

res
{
"id": 35,
"name": "특정인물",
"age": 53,
"gender": false,
"createdAt": "2018-08-27T07:53:31.000Z",
"updatedAt": "2018-08-27T07:53:31.000Z"
}

전체 목록을 가져오자!

/routes/users.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('User Api');
});

router.get('/list', (req,res,next)=> {

User.findAll()
.then((users) => {
console.log(users);
console.log('finish to findAll');
res.json(users);
})
.catch((err => {
console.error(err);
res.send(err);
}));


});

run

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
46
47
48
49
50
51
52
53
url - http://localhost:3005/users/list
method - get
res
[
{
"id": 1,
"name": "박기진",
"age": 29,
"gender": true,
"createdAt": "2018-08-24T07:19:13.000Z",
"updatedAt": "2018-08-24T07:19:37.000Z"
},
{
"id": 7,
"name": "박기진",
"age": 100,
"gender": false,
"createdAt": "2018-08-24T08:10:41.000Z",
"updatedAt": "2018-08-26T13:40:39.000Z"
},
{
"id": 32,
"name": "박기진",
"age": 15,
"gender": false,
"createdAt": "2018-08-27T07:44:50.000Z",
"updatedAt": "2018-08-27T07:44:50.000Z"
},
{
"id": 33,
"name": "박기진",
"age": 31,
"gender": false,
"createdAt": "2018-08-27T07:46:28.000Z",
"updatedAt": "2018-08-27T07:46:28.000Z"
},
{
"id": 34,
"name": "특정인물",
"age": 23,
"gender": false,
"createdAt": "2018-08-27T07:46:41.000Z",
"updatedAt": "2018-08-27T07:46:41.000Z"
},
{
"id": 35,
"name": "특정인물",
"age": 53,
"gender": false,
"createdAt": "2018-08-27T07:53:31.000Z",
"updatedAt": "2018-08-27T07:53:31.000Z"
}
]

Update

/routes/user.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
router.put('/:id', (req,res,next) => {
User.update(
{
name : req.body.name,
age : req.body.age,
gender : req.body.gender,
}, {
where : {id : req.params.id}
})
.then((result) => {
console.log(result);
console.log('finish to update');
res.json(result);
})
.catch((err => {
console.error(err);
res.send(err);
}));

});

Delete

특정필드를 삭제할때 함브로 삭제하면안된다.
deletedAt 컬럼을 사용하거나 특정 필드를 사용하여 소프트 델리트 형식으로하자!
하지만 지금은 마음대로 지워보자

/routes/user.js

1
2
3
4
5
6
7
8
9
10
router.delete('/:id', function(req, res, next) {
User.destroy({ where: { id: req.params.id } })
.then((result) => {
res.json(result);
})
.catch((err) => {
console.error(err);
next(err);
});
});

run 후

method-delete, http://localhost:3005/users/35 을 실행

db쿼리 직접실행

select * from users where id =35;

없음을 확인


위와같이 CRUD를 실행해보았지만 몬가 아쉬운 부분이 많다.

  1. 서비스로직이 필요하다!
  2. 에러핸들러가 없다
  3. 통일된 res object가 없다

4번째! 페이지에서 위와같은 일을 진행해보자!