Why does my Route not exist after using mux vars?

155 Views Asked by At

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)

}
0

There are 0 best solutions below