[react]KakaoMap API-データクエリ


前の投稿では、Timeline、CalendarデータがMongoDBに格納されています.以前FEを開発する時APIを呼び出して、偽のデータを返して、今実際のデータを調べてみます

0、成果物



1.カレンダの検索


カレンダーデータの照会に必要なパラメータ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: 조건}を類似クエリー条件と呼ぶ.
クエリを作成した後、exec()関数で実行し、結果を返してFEに入れます.
FE側は、再びresponseを結果として、ビジネスロジックに従って処理する.setHighlightArray、カレンダーでハイライト表示

2.Polylineの検索


polylineデータを照会する場合、userIdと選択した日付が必要です.

APIを飛ばすときにPOSTで飛ばすのは、上と同じように、身につけてもいいですが、別々に処理しました

以上のようにuserIdとdateをクエリー条件に設定し、結果を返してFEに渡す
  • APIは、Bodyを超える場合、POSTを
  • として使用する.
  • mongoseの関数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
                })
            })
    })