Fix error handling in renderStatic #64
@ -57,7 +57,7 @@ func createTemporaryRouter(t *testing.T) (*mux.Router, *rushlink) {
|
|||||||
fs: fileStore,
|
fs: fileStore,
|
||||||
rootURL: rootURL,
|
rootURL: rootURL,
|
||||||
}
|
}
|
||||||
return CreateMainRouter(&rl, true), &rl
|
return CreateMainRouter(&rl), &rl
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkStatusCode checks whether the status code from a recorded response is equal
|
// checkStatusCode checks whether the status code from a recorded response is equal
|
||||||
@ -150,7 +150,7 @@ func TestIssue53(t *testing.T) {
|
|||||||
func TestIssue60(t *testing.T) {
|
func TestIssue60(t *testing.T) {
|
||||||
srv, _ := createTemporaryRouter(t)
|
srv, _ := createTemporaryRouter(t)
|
||||||
|
|
||||||
// Put a URL with a fragment identifier into the database.
|
// Request a nonexistent static file
|
||||||
req, err := http.NewRequest("GET", "/css/nonexistent_file.css", nil)
|
req, err := http.NewRequest("GET", "/css/nonexistent_file.css", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
18
router.go
18
router.go
@ -82,12 +82,13 @@ func (w *statusResponseWriter) WriteHeader(statusCode int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateMainRouter creates the main Gorilla router for the application.
|
// CreateMainRouter creates the main Gorilla router for the application.
|
||||||
func CreateMainRouter(rl *rushlink, debug bool) *mux.Router {
|
//
|
||||||
|
// This function will not populate the router with an error-recovery and
|
||||||
|
// metrics-reporting middleware. If these middleware are required, then the
|
||||||
|
// caller should encapsulate this router inside of another router and register
|
||||||
|
// the middlewares on the encapsulating router.
|
||||||
|
func CreateMainRouter(rl *rushlink) *mux.Router {
|
||||||
router := mux.NewRouter()
|
router := mux.NewRouter()
|
||||||
if !debug {
|
|
||||||
router.Use(rl.recoveryMiddleware)
|
|
||||||
router.Use(rl.metricsMiddleware)
|
|
||||||
}
|
|
||||||
router.HandleFunc("/{path:img/"+staticFilenameExpr+"}", rl.staticGetHandler).Methods("GET", "HEAD")
|
router.HandleFunc("/{path:img/"+staticFilenameExpr+"}", rl.staticGetHandler).Methods("GET", "HEAD")
|
||||||
router.HandleFunc("/{path:css/"+staticFilenameExpr+"}", rl.staticGetHandler).Methods("GET", "HEAD")
|
router.HandleFunc("/{path:css/"+staticFilenameExpr+"}", rl.staticGetHandler).Methods("GET", "HEAD")
|
||||||
router.HandleFunc("/{path:js/"+staticFilenameExpr+"}", rl.staticGetHandler).Methods("GET", "HEAD")
|
router.HandleFunc("/{path:js/"+staticFilenameExpr+"}", rl.staticGetHandler).Methods("GET", "HEAD")
|
||||||
@ -122,8 +123,13 @@ func StartMainServer(addr string, db *db.Database, fs *db.FileStore, rawRootURL
|
|||||||
rootURL: rootURL,
|
rootURL: rootURL,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
router := mux.NewRouter()
|
||||||
|
router.Use(rl.metricsMiddleware)
|
||||||
|
router.Use(rl.recoveryMiddleware)
|
||||||
|
router.Handle("/", CreateMainRouter(&rl))
|
||||||
|
|
||||||
srv := &http.Server{
|
srv := &http.Server{
|
||||||
Handler: CreateMainRouter(&rl, false),
|
Handler: router,
|
||||||
Addr: addr,
|
Addr: addr,
|
||||||
WriteTimeout: 15 * time.Second,
|
WriteTimeout: 15 * time.Second,
|
||||||
ReadTimeout: 15 * time.Second,
|
ReadTimeout: 15 * time.Second,
|
||||||
|
8
views.go
8
views.go
@ -88,7 +88,7 @@ func mapExtend(m map[string]interface{}, key string, value interface{}) {
|
|||||||
|
|
||||||
func (rl *rushlink) renderStatic(w http.ResponseWriter, r *http.Request, path string) {
|
func (rl *rushlink) renderStatic(w http.ResponseWriter, r *http.Request, path string) {
|
||||||
var modTime time.Time
|
var modTime time.Time
|
||||||
if info, err := AssetInfo(path); err != nil {
|
if info, err := AssetInfo(path); err == nil {
|
||||||
modTime = info.ModTime()
|
modTime = info.ModTime()
|
||||||
}
|
}
|
||||||
contents, err := Asset(path)
|
contents, err := Asset(path)
|
||||||
@ -118,7 +118,12 @@ func (rl *rushlink) render(w http.ResponseWriter, r *http.Request, status int, t
|
|||||||
err = fmt.Errorf("'%v' not in textTemplates", tmplName)
|
err = fmt.Errorf("'%v' not in textTemplates", tmplName)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if status != 0 {
|
||||||
|
w.WriteHeader(status)
|
||||||
|
}
|
||||||
|
if r.Method != "HEAD" {
|
||||||
err = tmpl.Execute(w, data)
|
err = tmpl.Execute(w, data)
|
||||||
|
}
|
||||||
case "text/html":
|
case "text/html":
|
||||||
w.Header().Set("Content-Type", "text/html")
|
w.Header().Set("Content-Type", "text/html")
|
||||||
tmpl := htmlTemplates[tmplName]
|
tmpl := htmlTemplates[tmplName]
|
||||||
@ -142,7 +147,6 @@ func (rl *rushlink) render(w http.ResponseWriter, r *http.Request, status int, t
|
|||||||
if status != 0 {
|
if status != 0 {
|
||||||
w.WriteHeader(status)
|
w.WriteHeader(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.Method != "HEAD" {
|
if r.Method != "HEAD" {
|
||||||
err = tmpl.Execute(w, data)
|
err = tmpl.Execute(w, data)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user