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 | docker restart 'CONTAINER ID' |
/routers/user.js
1 | const User = require('../models').User; |
추가! orm모델사용!
Create
- 준비사항
- npm install body-parser -save 후
package.json확인 - postman설치 (사용방법은 구글에 많음)
- npm install body-parser -save 후
app.js
1
2
3
4
5 const bodyParser = require('body-parser');
app.use(express.urlencoded({ extended: false }));
app.use(bodyParser.json());
위의 2개 다 추가
- postman에서 json으로 보낼지
- www.-form-urlencoded로 보낼지
/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 | Url - http://localhost:3005/users/ |
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 | Url - http://localhost:3005/users/35 |
전체 목록을 가져오자!
/routes/users.js
1 | /* GET users listing. */ |
run
1 | url - http://localhost:3005/users/list |
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를 실행해보았지만 몬가 아쉬운 부분이 많다.
- 서비스로직이 필요하다!
- 에러핸들러가 없다
- 통일된 res object가 없다
4번째! 페이지에서 위와같은 일을 진행해보자!