I am trying to create a small API in Go. I want to use mux.Vars to modify my query based on the URL e.g.:
/sensor/test -> select * from sensor where id = test
When i register my Route to use mux.Vars, i.e
getSensorValueRouter.HandleFunc("/sensor/{id: [a-z]+}", handler.GetSensorValue)
I get 404 Page not found.
Can some one explain to me what I am doing wrong here?
main.go:
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"time"
gohandlers "github.com/gorilla/handlers"
"github.com/gorilla/mux"
_ "github.com/lib/pq"
"github.com/r0cheny/little_boy/api/handlers"
)
func main() {
l := log.New(os.Stdout, "api", log.LstdFlags)
handler := handlers.NewDBConnection()
sm := mux.NewRouter()
getSensorRouter := sm.Methods(http.MethodGet).Subrouter()
getSensorRouter.HandleFunc("/sensor", handler.GetSensor)
getSensorValueRouter := sm.Methods(http.MethodGet).Subrouter()
getSensorValueRouter.HandleFunc("/sensor/{id: [a-z]+}", handler.GetSensorValue)
ch := gohandlers.CORS(gohandlers.AllowedOrigins([]string{"*"}))
s := http.Server{
Addr: ":9090",
Handler: ch(sm),
ErrorLog: l,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
go func() {
l.Println("Starting server on Port 9090")
err := s.ListenAndServe()
if err != nil {
l.Println("Error starting server: %s\n", err)
os.Exit(1)
}
}()
sigChan := make(chan os.Signal)
signal.Notify(sigChan, os.Interrupt)
signal.Notify(sigChan, os.Kill)
sig := <-sigChan
l.Println("Recieved terminate, graceful shutddown", sig)
//make sure the DB Connection is closed
handler.CloseDBConnection()
tc, _ := context.WithTimeout(context.Background(), 30*time.Second)
s.Shutdown(tc)
}