Serve html from golang server via template
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
@@ -16,7 +17,8 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
db *sql.DB
|
||||
db *sql.DB
|
||||
indexHtmlTemplate *template.Template
|
||||
)
|
||||
|
||||
type ChoicesPost struct {
|
||||
@@ -60,6 +62,22 @@ func initDatabase() {
|
||||
}
|
||||
}
|
||||
|
||||
func prepareStaticContent() {
|
||||
var err error
|
||||
indexHtmlTemplate, err = template.ParseFiles("./static/index.html")
|
||||
if err != nil {
|
||||
log.Fatalf("[!] Could not parse index.html template, error: %s\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
func handleGetRoot(w http.ResponseWriter, r *http.Request) {
|
||||
err := indexHtmlTemplate.Execute(w, nil)
|
||||
if err != nil {
|
||||
log.Printf("[!] Could not execute index.html template, error: %s\n", err)
|
||||
http.Error(w, "Error rendering template", http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
func handleGetPing(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("[*] Received request %v %v\n", r.Method, r.URL)
|
||||
fmt.Fprintf(w, "PONG\n")
|
||||
@@ -86,17 +104,30 @@ func handlePostSubmit(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("[!] Could not marshal choices, error: %s\n", err)
|
||||
}
|
||||
|
||||
tx, err := db.Begin()
|
||||
if err != nil {
|
||||
log.Printf("[!] Could not begin database transaction, error: %s\n", err)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
const query = `
|
||||
INSERT INTO choices (pollid, username, choices)
|
||||
VALUES (?, ?, ?);
|
||||
`
|
||||
|
||||
_, err = db.Exec(query, choicesPost.PollId, choicesPost.Username, string(choicesJson))
|
||||
_, err = tx.Exec(query, choicesPost.PollId, choicesPost.Username, string(choicesJson))
|
||||
if err != nil {
|
||||
log.Printf("[!] Could not insert choices into database, error: %s\n", err)
|
||||
tx.Rollback()
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("[*] Persisted choices for %s to database\n", "DUMMY USERNAME")
|
||||
tx.Commit()
|
||||
|
||||
log.Printf("[*] Persisted choices for poll %d, username %s to database\n",
|
||||
choicesPost.PollId, choicesPost.Username)
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
@@ -112,11 +143,18 @@ func main() {
|
||||
initDatabase()
|
||||
defer db.Close()
|
||||
|
||||
prepareStaticContent()
|
||||
|
||||
http.HandleFunc(
|
||||
"GET /api/ping",
|
||||
handleGetPing,
|
||||
)
|
||||
|
||||
http.HandleFunc(
|
||||
"GET /",
|
||||
handleGetRoot,
|
||||
)
|
||||
|
||||
http.HandleFunc(
|
||||
"POST /api/submit",
|
||||
handlePostSubmit,
|
||||
|
||||
Reference in New Issue
Block a user