Toy Project with Go Lang - 2
Project 둘째날
어제 MySQL DB 를 간단하게 구축하고, GoLang 과 MySQL 을 연동해 데이터를 입력하고, 받아오는 내용을 구현했었다. 오늘 목표는 우선, http 를 활용해 새로운 데이터를 입력하고, 받아온 데이터를 화면에 띄워줄 수 있도록 하는 것이었다.
대략적인 모양새는 갖추도록 만들었고, Post / Get 을 통해 데이터를 쓰고 받아오는 형태는 구현을 완료했다. 하지만 문제는, 프론트를 만들어줘야 하는데 그 부분에 대한 지식이 없고, 센스도 없다는 점이었다.
우선 오늘은 너무 졸리니까 여기까지만 하고, 다음주에 다시 공부를 해서 프론트를 대충이라도 만들고 DB 랑 HTTP 를 연동하도록 해야겠다.
package HttpAction
import (
"Database"
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"io/ioutil"
"log"
"net/http"
)
func HandleRequest() {
myRouter := mux.NewRouter().StrictSlash(true)
// 여기서 각 페이지 핸들러들 등록
myRouter.HandleFunc("/", handleHomePage)
myRouter.HandleFunc("/posts", handleGetPosts)
myRouter.HandleFunc("/posts/{id}", handleGetPostByID)
myRouter.HandleFunc("/post", handleNewPost).Methods("POST")
log.Fatal(http.ListenAndServe(":9090", myRouter))
}
func handleNewPost(w http.ResponseWriter, r *http.Request) {
log.Println("Endpoint Hit: handleNewPost")
reqBody, _ := ioutil.ReadAll(r.Body)
var post Database.Post
json.Unmarshal(reqBody, &post)
Database.InsertPost(post)
}
func handleGetPostByID(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id := vars["id"]
log.Println("Endpoint Hit: handleGetPostByID")
post, err := Database.SelectByID(id)
if err != nil {
log.Println("Error Occurred", err)
}
json.NewEncoder(w).Encode(post)
}
func handleGetPosts(w http.ResponseWriter, r *http.Request) {
log.Println("Endpoint Hit: handleGetPosts")
// 이제 여기서 DB 를 긁어와서 주는 형식으로 만들어야 되지 않을까?
posts, err := Database.SelectAll()
if err != nil {
log.Println("Error Occurred", err)
}
json.NewEncoder(w).Encode(posts)
//for _, post := range posts {
// fmt.Println(post)
// fmt.Fprintf(w, "%s", post.ToString())
//}
}
func handleHomePage(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Welcome to the HomePage!")
log.Println("Endpoint Hit: homePage")
}