Nodejs express로 에어비앤비 클론코딩 해보기 5.

도시별 숙소 보여주기

도시별 숙소 라우터

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
router.get('/city', async (req, res, next) => {
try {

let hosts;
let count;
let city;
let category
...
hosts = await Host.findAll({
where: {
hostaddress: {
[Op.like]: "%" + req.query.city + "%"
},
},
include: {
model: Image,
attributes: ['src'],
},
order: [['id', 'DESC']],
offset: offset,
limit: 12,

});
count = await Host.count({
where: {
city: {
[Op.like]: "%" + req.query.city + "%"
},
},
});
if(req.query.city) {
city = req.query.city;
} else {
city = "전체"
}
res.render('hosts', {hosts, count, city});
}

} catch (error) {
console.error(error);
next(error);
}
});

숙소의 주소 중 도시 컬럼의 값을 비교하여 해당 도시의 숙소를 가져오는 방식이다.

각 정보를 담는 변수는 다른 조건의 검색 기능에도 사용할 예정이라 미리 만들어서 각각 값을 넣어주는 방식으로 진행했다.

카운트를 해주는 이유는 보내주는 숙소들의 합계를 구해 넘겨서 페이징 처리를 하기 위함이다.

결과

데이터 확인

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
54
55
56

[
Host {
dataValues: {
id: 1,
title: '테스트용 1번 숙소입니다',
hostaddress: '서울특별시 강남구 포일세거리로 23 101 - 705',
city: '서울특별시',
person: '최대 3명',
roominfo_room: '2개',
roominfo_bed: '싱글 침대 2개',
roominfo_cook: '취사 가능',
roominfo_bathroom: '1개',
hostinfo: '테스트용 숙소 1번입니다\r\n\r\n숙소 업로드가 잘 진행되는지 확인합니다.',
hosttype: '펜션',
createdAt: 2021-04-01T19:25:20.000Z,
updatedAt: 2021-04-01T19:25:20.000Z,
deletedAt: null,
UserId: 1,
Images: [Array]
},
_previousDataValues: {
id: 1,
title: '테스트용 1번 숙소입니다',
hostaddress: '서울특별시 강남구 포일세거리로 23 101 - 705',
city: '서울특별시',
person: '최대 3명',
roominfo_room: '2개',
roominfo_bed: '싱글 침대 2개',
roominfo_cook: '취사 가능',
roominfo_bathroom: '1개',
hostinfo: '테스트용 숙소 1번입니다\r\n\r\n숙소 업로드가 잘 진행되는지 확인합니다.',
hosttype: '펜션',
createdAt: 2021-04-01T19:25:20.000Z,
updatedAt: 2021-04-01T19:25:20.000Z,
deletedAt: null,
UserId: 1,
Images: [Array]
},
_changed: Set(0) {},
_options: {
isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
include: [Array],
includeNames: [Array],
includeMap: [Object],
includeValidated: true,
attributes: [Array],
raw: true
},
isNewRecord: false,
Images: [ [Image], [Image], [Image], [Image] ]
}
]
1

서울시 숙소를 가져오도록 하였고 현재 숙소는 1개이다. 숙소에 대한 데이터와 숙소들의 총 합계도 잘 구해진 것을 확인 할 수 있다.

화면

서울시의 숙소에 대한 데이터를 가져왔고 가져온 모든 데이터를 사용한 것은 아니지만 데이터 확인을 위해 진행한 것이고 올바르게 잘 가져와 졌다. 👍

보완점

sequelize의 비교 연산자를 처음 써보면서 조금 헷갈리는 부분이 많았다. 공식 문서가 너무 불친절 하지만 잘 참고하여 원하는 결과를 얻을 수 있게 공부가 더 필요하다.

지금은 한 개의 데이터만 가져오지만 위에서 진행한 것처럼 필요하지 않은 데이터까지 넘겨 주는 건 올바르지 않다. 필요한 데이터만 보낼 수 있도록 코드를 조금 수정해야 할 필요가 있다.

Author

han Ju Ryeon

Posted on

2021-09-09

Updated on

2021-12-05

Licensed under

댓글