Skip to content

Commit 7f43e5e

Browse files
committed
Extracting some example middleware into seperate files
1 parent 215ed5a commit 7f43e5e

File tree

4 files changed

+51
-51
lines changed

4 files changed

+51
-51
lines changed

Makefile

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ GOFMT=gofmt
55

66
GOFILES=\
77
mango.go\
8+
logger.go\
9+
show_errors.go\
810

911
include $(GOROOT)/src/Make.pkg
1012

logger.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package mango
2+
3+
import (
4+
"log"
5+
)
6+
7+
func Logger(logger *log.Logger) Middleware {
8+
return func(env Env, app App) (Status, Headers, Body) {
9+
env["mango.logger"] = logger
10+
return app(env)
11+
}
12+
}

mango.go

+1-51
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package mango
22

33
import (
4-
"bytes"
54
"fmt"
65
"http"
7-
"log"
86
"os"
9-
"strings"
10-
"template"
117
)
128

139
type Env map[string]interface{}
@@ -95,53 +91,7 @@ func (this *Stack) Run(app App) os.Error {
9591
if this.Address == "" {
9692
this.Address = "0.0.0.0:8000"
9793
}
98-
log.Println("Starting Mango Stack On:", this.Address)
94+
fmt.Println("Starting Mango Stack On: %s", this.Address)
9995
http.HandleFunc("/", this.buildStack())
10096
return http.ListenAndServe(this.Address, nil)
10197
}
102-
103-
104-
/*************************************
105-
* End Mango Source
106-
* Begin Example Usage
107-
************************************/
108-
109-
// An example of how to pass runtime config to Middleware
110-
func Logger(prefix string) Middleware {
111-
return func(env Env, app App) (Status, Headers, Body) {
112-
status, headers, body := app(env)
113-
log.Println(prefix, env["mango.request"].(*http.Request).Method, env["mango.request"].(*http.Request).RawURL, status)
114-
return status, headers, body
115-
}
116-
}
117-
118-
func ShowErrors(templateString string) Middleware {
119-
if templateString == "" {
120-
templateString = `
121-
<html>
122-
<body>
123-
<p>
124-
{Error|html}
125-
</p>
126-
</body>
127-
</html>
128-
`
129-
}
130-
131-
errorTemplate := template.MustParse(templateString, nil)
132-
133-
return func(env Env, app App) (status Status, headers Headers, body Body) {
134-
defer func() {
135-
if err := recover(); err != nil {
136-
log.Println("Error: ", err)
137-
buffer := bytes.NewBufferString("")
138-
errorTemplate.Execute(buffer, struct{ Error string }{err.(string)})
139-
status = 500
140-
headers = make(map[string]string)
141-
body = Body(buffer.String())
142-
}
143-
}()
144-
145-
return app(env)
146-
}
147-
}

show_errors.go

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package mango
2+
3+
import (
4+
"bytes"
5+
"template"
6+
)
7+
8+
func ShowErrors(templateString string) Middleware {
9+
if templateString == "" {
10+
templateString = `
11+
<html>
12+
<body>
13+
<p>
14+
{Error|html}
15+
</p>
16+
</body>
17+
</html>
18+
`
19+
}
20+
21+
errorTemplate := template.MustParse(templateString, nil)
22+
23+
return func(env Env, app App) (status Status, headers Headers, body Body) {
24+
defer func() {
25+
if err := recover(); err != nil {
26+
buffer := bytes.NewBufferString("")
27+
errorTemplate.Execute(buffer, struct{ Error string }{err.(string)})
28+
status = 500
29+
headers = make(map[string]string)
30+
body = Body(buffer.String())
31+
}
32+
}()
33+
34+
return app(env)
35+
}
36+
}

0 commit comments

Comments
 (0)