Skip to content

Instantly share code, notes, and snippets.

@omarqureshi
Last active January 3, 2016 17:29
Show Gist options
  • Save omarqureshi/8496408 to your computer and use it in GitHub Desktop.
Save omarqureshi/8496408 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"net/http"
"log"
"io"
"io/ioutil"
"os"
"github.com/gorilla/mux"
_ "github.com/bmizerany/pq"
"github.com/jmoiron/sqlx"
)
var (
TRACE *log.Logger
INFO *log.Logger
WARNING *log.Logger
ERROR *log.Logger
db *sqlx.DB
err error
)
type User struct {
Id int `db:"id"`
Email string `db:"email"`
}
func initLogger(traceHandle io.Writer, infoHandle io.Writer, warningHandle io.Writer, errorHandle io.Writer) {
TRACE = log.New(traceHandle,
"TRACE: ",
log.Ldate|log.Ltime|log.Lshortfile)
INFO = log.New(infoHandle,
"INFO: ",
log.Ldate|log.Ltime|log.Lshortfile)
WARNING = log.New(warningHandle,
"WARNING: ",
log.Ldate|log.Ltime|log.Lshortfile)
ERROR = log.New(errorHandle,
"ERROR: ",
log.Ldate|log.Ltime|log.Lshortfile)
}
func PageHandler(w http.ResponseWriter, r *http.Request) {
user := User{}
rows, err := db.Queryx("select id, email from users order by created_at limit 5")
for rows.Next() {
rows.StructScan(&user)
fmt.Printf("%#v\n", user)
}
if err != nil {
panic(err.Error())
}
fmt.Fprintf(w, "Serving %s!", r.URL.Path[1:])
}
func ChainedHandler(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
INFO.Println(r.URL.Path)
h.ServeHTTP(w, r)
})
}
func main() {
db,err = sqlx.Connect("postgres", "dbname=buddyapp_development sslmode=disable")
if err != nil {
panic(err.Error())
}
initLogger(ioutil.Discard, os.Stdout, os.Stdout, os.Stderr)
router := mux.NewRouter()
router.HandleFunc("/{page}", PageHandler)
chained_handler := ChainedHandler(router)
http.ListenAndServe(":8080", chained_handler)
db.Close()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment