일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OOAD
- MongoDB
- DATABASE
- sequelize
- Express
- python
- algorithm
- typeorm
- postman
- Android
- React
- Crawling
- node.js
- mysql
- Scheduling
- mongoose
- Network
- macos
- linux
- wireshark
- AWS
- docker
- ubuntu
- Util
- TypeScript
- Kotlin
- HTML
- S3
- css
- OS
- Today
- Total
Seongwon Lim
[node.js] Sequelize를 이용하여 Mysql CRUD 기능 구현하기 본문
들어가기
[node.js] Sequelize를 이용하여 Mysql Create 구현하기
데이터베이스에 데이터를 추가하는 Create에 관한 내용은 이전 포스팅에서 다루었으므로 이번 포스팅 글에서는 Create를 제외한 RUD에 관한 내용을 다룰 것이다. 따라서 Create 내용이 궁금한 분들은 위 포스팅 글을 참고하면 좋을 것 같다.
![](https://blog.kakaocdn.net/dn/Jg3y9/btrBMg6mJPz/QKqjtN8YELkqTsahMJdvDk/img.png)
Read 기능 구현하기
Seqeulize를 이용해서 조회 기능을 구현할 때에는 findOne(), findAll() 등의 메서드를 이용한다.
- findOne : 데이터 단일 조회 시 사용
- findAll : 특정 조건을 가진 데이터 전체 조회 시 사용
1. findOne()을 이용한 단일 조회
router.get('/', (req, res, next) => {
models.Users.findOne({}) // {} 안에 조건을 추가할 수 있다.
.then((user) => {
res.status(200).json(user);
});
});
위와 같이 코드를 정의하고 localhost:3000/register로 GET 호출을 하면 Users 테이블의 제일 첫번째 데이터를 리턴으로 받을 수 있다.
![](https://blog.kakaocdn.net/dn/0CXG2/btrBKvJN7Hi/Erc7K7h5MuWgyQaqLbvnx0/img.png)
Postman을 통해서 살펴본 요청 결과이다. 첫번째 데이터를 Json 형태로 받을 것을 확인할 수 있다.
2. findAll()을 이용한 전체 조회
findAll()을 이용하면 조건을 걸어서 해당 조건에 부합하는 모든 데이터를 가져오는 경우 사용되거나 특정 컬럼 전체를 가져올 때 사용된다.
조건에 부합하는 데이터를 가져오는 경우
router.get('/', (req, res, next) => {
models.Users.findAll({
where: { // where을 통해서 필터링된 데이터를 가져올 수 있다.
deletedAt: null
}
})
.then((user) => {
res.status(200).json(user);
});
});
![](https://blog.kakaocdn.net/dn/biHPC3/btrBGMlUD1i/jQppqReeelk2q54pkxdHG1/img.png)
조건에 deletedAt 컬럼의 데이터가 null인 데이터를 모두 가져오는 경우이며 결과는 위처럼 3개의 데이터를 모두 반환한 것을 확인할 수 있다.
특정 컬럼의 데이터를 가져오는 경우
router.get('/', (req, res, next) => {
models.Users.findAll({
attributes: ['email', 'name'] // attributes를 사용하고 배열의 값에 리턴받을 컬럼명을 입력한다.
})
.then((user) => {
res.status(200).json(user);
});
});
![](https://blog.kakaocdn.net/dn/KD9oD/btrBGN6aw2f/bWNmENdZrnwAO4Qxe6jBn1/img.png)
attributes 의 배열 값으로 email, name 2개의 컬럼을 입력했으므로 GET 요청을 보냈을 때 위와같이 테이블에서 email, name에 해당하는 컬럼을 모두 가져온 것을 확인할 수 있다.
Update 기능 구현하기
Seqeulize를 이용해서 수정 기능을 구현할 때에는 update() 메서드를 이용한다.
Restful 하게 코드를 구현하기 위해서 요청은 PUT 또는 PATCH로 보내야 한다. 또한 필자는 일부 데이터만 수정하는 예시를 들 것이므로 PATCH를 사용했다.
update()를 이용한 데이터 수정
router.patch('/', (res, req, next) => {
models.Users.update({name: "limsw"}, { where: { name: "lim" }
})
.then((result) => {
res.status(200).send();
})
.catch((err) => {
res.send(err);
})
});
update() 안에 중괄호를 통해서 수정할 데이터를 지정할 수 있으며 2번째 중괄호는 조건을 걸 수 있다.
위의 경우는 테이블의 name 컬럼에서 lim이라는 데이터를 가진 것을 찾아서 limsw로 바꾸는 예제이다. 결과는 아래와 같다.
![](https://blog.kakaocdn.net/dn/dGXXky/btrBJLTNYoo/LnebWKrXh0MQ2NPAyFpUUK/img.png)
Delete 기능 구현하기
Seqeulize를 이용해서 수정 기능을 구현할 때에는 destroy() 메서드를 이용한다. 요청은 delete를 사용했고 destroy() 또한 조건을 줄 수 있다.
조건을 주지 않을 경우 모든 데이터가 삭제될 수 있으므로 유의해야 한다.
destroy()를 이용한 데이터 삭제
router.delete('/', (res, req, next) => {
models.Users.destroy({
where: {
name: "kim"
}
})
.then((result) => {
res.status(204).send();
})
.catch((err) => {
res.send(err);
})
});
위처럼 destroy() 메서드 안에 조건을 추가할 수 있다. 필자는 name 컬럼의 데이터 값이 kim인 데이터를 삭제했다. 삭제된 결과는 아래와 같다.
![](https://blog.kakaocdn.net/dn/sLzYL/btrBJL7oVIH/I5rodk8iqX8NqIxJATIKak/img.png)
현재 데이터 자체가 실제로 삭제 되지는 않았지만 deletedAt 컬럼의 값이 수정된 것을 확인할 수 있다. 필자는 User.js에서 모델을 정의할 때 데이터가 삭제된 경우 타임스탬프를 남기도록 설정했기 때문에 위와 같이 결과가 나타난 것이다.
사용자 설정에 맞게 모델을 정의하고 위와 같이 destory() 를 수행한다면 조건에 부합하는 데이터를 삭제할 수 있다.
'Node.js' 카테고리의 다른 글
[node.js] Sequelize 이메일 중복 체크 구현하기 (0) | 2022.05.11 |
---|---|
[node.js] Sequelize를 이용하여 Mysql Create 구현하기 (0) | 2022.05.10 |
[node.js] Sequelize 사용 방법 및 Mysql 연동하기 (0) | 2022.05.10 |
[node.js] Mysql 다중쿼리 처리하기 (0) | 2022.05.10 |
[node.js] Bcrypt를 이용한 패스워드 암호화 (0) | 2022.05.10 |