본문 바로가기

GoLang

GIN 그래프 그리기

목표 : MongoDb의 값을 가져와 그 값을 바탕으로 Google Chart 그래프 그리기

 

몽고 DB에 저장된 값 (1개만 꺼내서 쓸 예정)

 

route.go 

server.route.GET("/graph", handler.GraphHandler)
server.route.GET("/getGraphData", handler.DrawGraph)

 

handler/graph.go

package handler

import (
	"context"
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"

	"go.mongodb.org/mongo-driver/bson/primitive"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"

	"gopkg.in/mgo.v2/bson"
)

type Graph struct {
	ID  primitive.ObjectID
	num string `json:"id"`
	x   int    `json:"x"`
	y   int    `json:"y"`
}

func GraphHandler(c *gin.Context) {

	c.Header("Content-Type", "text/html")
	c.HTML(http.StatusOK, "graph.html", gin.H{
		"title": "메인화면",
	})
}

func DrawGraph(c *gin.Context) {
	c.Header("Content-Type", "application/json charset=utf-8")
	ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
	clientOptions1 := options.Client().ApplyURI("mongodb://localhost:27017")
	client1, err := mongo.NewClient(clientOptions1)
	if err != nil {
		log.Fatal(err)
	}
	err = client1.Connect(context.Background())
	collection1 := client1.Database("local").Collection("graph1")

	//Find
	cursor, err := collection1.Find(ctx, bson.M{})
	if err != nil {
		log.Fatal(err)
	}

	//find한 결과를 전부 json으로 변환
	var episodes []bson.M
	cursor.All(ctx, &episodes)

	//find한 결과를 하나씩 꺼내서 사용
	for cursor.Next(ctx) {
		var episode bson.M
		if err = cursor.Decode(&episode); err != nil {
			log.Fatal(err)
		}
		s, _ := json.Marshal(episode)
		fmt.Println(string(s))
	}

	//FindOne
	//find 1개를 한 값을 넘겨줌
	doc1 := collection1.FindOne(context.TODO(), bson.M{})
	var finds bson.M
	doc1.Decode(&finds)
	
    //json으로 findOne 값을 넘겨줌
	c.JSON(200, finds)
}

graph.html (디폴트그래프와 findone으로 그린 그래프)

<head>
    <title>메인 페이지</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="UTF-8">
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
</head>

<body>
    <div id="chart_div" style="width: 900px; height: 500px;"></div>
    <div id="chart_div1" style="width: 900px; height: 500px;"></div>
</body>



<script type="text/javascript">
$(document).ready(function() {
    defaultGraph();
    graph1();
});

function graph1() {
    $.ajax({
        url:"/getGraphData",
        type:"GET",
        contentType: "application/json; charset=utf-8",
        success: function(resData) { 
            google.load("visualization", "2", {packages:["corechart"]});
            google.setOnLoadCallback(drawChart);
            function drawChart() {
             var data = google.visualization.arrayToDataTable([
             ['test', 'y','z'],
             [resData.id,resData.y,resData.x],
             [resData.id,resData.x,resData.y]
             ]);

    var options = {
      title: 'Company Performance'
    };

    var chart = new google.visualization.LineChart(document.getElementById('chart_div1'));
    chart.draw(data, options);
  }
        },
        error: function() {
            alert("조회 처리 중 에러가 발생했습니다");
        }
    })
}
  function defaultGraph(){
  google.load("visualization", "1", {packages:["corechart"]});
  google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = google.visualization.arrayToDataTable([
      ['test', 'Sales', 'Expenses'],
      ['1',  400,      400],
      ['2',  522,      460],
      ['3',  612,       1120],
      ['4',  753,      540]
    ]);

    var options = {
      title: 'Company Performance'
    };

    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
}
</script>

POSTMAN 

ajax가 get요청을 하면 x,y 값을 전달한다.

 

url/graph

디폴트 그래프와 findOne 그래프

 

'GoLang' 카테고리의 다른 글

GIN Ajax로 값 전달하기  (0) 2020.11.22
GIN 동적 그래프 그리기  (0) 2020.11.20
GIN MongoDB Test  (0) 2020.11.17
GIN POST TEST2  (0) 2020.11.14
GIN POST 테스트  (0) 2020.11.12