[React] 카카오 Map API - 데이터 조회

또여·2021년 9월 2일
0

React 프로젝트

목록 보기
11/20
post-custom-banner

앞의 게시글에서 Timeline, Calendar 데이터를 MongoDB에 저장했다. 기존에 FE 개발할 때는 API를 호출하고, 가짜 데이터를 리턴해주고 있었는데 실제 데이터를 조회해본다

0. 결과물

1. Calendar 조회

달력 데이터를 조회할때 필요한 매개변수는 userId만 필요하다

body에 owner:userId로 담아서 매개변수로 넘겼는데, 이때 body를 넘기는 경우에 api 종류를 POST로 해야한다.. GET으로는 매개변수를 넘길 수 없는것 같다 자세한건 나중에 찾아봐야할듯
여튼 ID를 담아서 API를 호출하면 서버쪽에서 그 ID로 calendar 데이터 찾아서 리턴하면된다

우선 mongoose를 이용해서 읽어와야하므로 당연히 라인 2번에 mongoose 넣어주고
다뤄야할 Calendar 모델을 읽어야하므로 라인 5번도.

라인 15번에 find로 where절을 완성해준다
find({ 칼럼명 : 조회조건, 칼럼명2: 조회조건2}, ...)
이런식으로 할 수도 있고, 구글링해보니 find().where(...).where(...)이런식으로도 가능하다고 한다
{$in: 조건}은 like 조회조건이라고 한다.
쿼리를 만들고 나면, exec()함수로 실행시켜서 결과를 리턴받고 그걸 담아서 FE로 넘기면 된다

그러면 다시 FE쪽에서는 response로 결과 받아서 비즈니스 로직에 따라 처리한다. setHighlightArray해서 캘린더에 하이라이트되어서 표시된다

2. Polyline 조회

polyline 데이터를 조회할 때는, userId와 선택한 날짜가 필요하다

API 날릴 때 POST로 날리는데, 위와 마찬가지로 body에 다 넣어서 해도 되긴하지만, 나눠서 처리해보았다

위와 마찬가지로 userId와 date를 조회조건으로 설정해서 결과를 리턴받아서 FE로 넘겨준다

  • API 호출해서 Body를 넘길일이 있을 때는 POST로 써야한다
  • mongoose의 함수인 find, exec를 사용하면 조회가 수월하다

3. 소스

calendar.js

const express = require('express');
const mongoose = require('mongoose');
const router = express.Router();
const multer = require('multer')
const { Calendar } = require('../models/Calendar')

//=================================
//             Calendar
//=================================


router.post('/', (req, res) =>{
    let userId = req.body.owner
    //console.log('>> userId',userId)
    Calendar.find({ owner: { $in: userId}})
        .exec((err, calendarInfo) => {
            if(err) return res.status(400).json({success:false, err})
            return res.status(200).json({
                success:true,
                calendarInfo:calendarInfo
            })  
        })
})

module.exports = router;

polyline.js

const express = require('express');
const router = express.Router();
const multer = require('multer')
const fs = require('fs')
const moment = require("moment")
const { User } = require("../models/User")
const { Timeline } = require('../models/Timeline')
const { Calendar } = require('../models/Calendar')
const lodash = require('lodash');


//=================================
//             Polyline
//=================================

router.post('/datas', (req, res) =>{
    let userId = req.body.owner
    let inputDate = req.query.date
    
    //console.log('==> inputDate', inputDate)

    Timeline.find({ owner: { $in: userId}, date: inputDate})
        .exec((err, polylineInfo) => {
            if(err) return res.status(400).json({success:false, err})
            return res.status(200).json({
                success:true,
                polylineInfo:polylineInfo
            })
        })
})
profile
기록 열심히하는 개발자인척
post-custom-banner

0개의 댓글