Skip to content

Commit bddb1c4

Browse files
committed
日志和错误处理
1 parent 17902f7 commit bddb1c4

File tree

9 files changed

+76
-21
lines changed

9 files changed

+76
-21
lines changed

handlers/auth.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package handlers
22

33
import (
4-
"fmt"
54
"github.com/xueyuanjun/chitchat/models"
65
"net/http"
76
)
@@ -24,15 +23,15 @@ func Signup(writer http.ResponseWriter, request *http.Request) {
2423
func SignupAccount(writer http.ResponseWriter, request *http.Request) {
2524
err := request.ParseForm()
2625
if err != nil {
27-
fmt.Println("Cannot parse form")
26+
danger(err, "Cannot parse form")
2827
}
2928
user := models.User{
3029
Name: request.PostFormValue("name"),
3130
Email: request.PostFormValue("email"),
3231
Password: request.PostFormValue("password"),
3332
}
3433
if err := user.Create(); err != nil {
35-
fmt.Println("Cannot create user")
34+
danger(err, "Cannot create user")
3635
}
3736
http.Redirect(writer, request, "/login", 302)
3837
}
@@ -43,12 +42,12 @@ func Authenticate(writer http.ResponseWriter, request *http.Request) {
4342
err := request.ParseForm()
4443
user, err := models.UserByEmail(request.PostFormValue("email"))
4544
if err != nil {
46-
fmt.Println("Cannot find user")
45+
danger(err, "Cannot find user")
4746
}
4847
if user.Password == models.Encrypt(request.PostFormValue("password")) {
4948
session, err := user.CreateSession()
5049
if err != nil {
51-
fmt.Println("Cannot create session")
50+
danger(err, "Cannot create session")
5251
}
5352
cookie := http.Cookie{
5453
Name: "_cookie",
@@ -67,7 +66,7 @@ func Authenticate(writer http.ResponseWriter, request *http.Request) {
6766
func Logout(writer http.ResponseWriter, request *http.Request) {
6867
cookie, err := request.Cookie("_cookie")
6968
if err != http.ErrNoCookie {
70-
fmt.Println("Failed to get cookie")
69+
warning(err, "Failed to get cookie")
7170
session := models.Session{Uuid: cookie.Value}
7271
session.DeleteByUUID()
7372
}

handlers/helper.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,22 @@ import (
55
"fmt"
66
"github.com/xueyuanjun/chitchat/models"
77
"html/template"
8+
"log"
89
"net/http"
10+
"os"
11+
"strings"
912
)
1013

14+
var logger *log.Logger
15+
16+
func init() {
17+
file, err := os.OpenFile("logs/chitchat.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
18+
if err != nil {
19+
log.Fatalln("Failed to open log file", err)
20+
}
21+
logger = log.New(file, "INFO ", log.Ldate|log.Ltime|log.Lshortfile)
22+
}
23+
1124
// Checks if the user is logged in and has a session, if not err is not nil
1225
func session(writer http.ResponseWriter, request *http.Request) (sess models.Session, err error) {
1326
cookie, err := request.Cookie("_cookie")
@@ -45,4 +58,26 @@ func generateHTML(writer http.ResponseWriter, data interface{}, filenames ...str
4558
// version
4659
func Version() string {
4760
return "0.1"
48-
}
61+
}
62+
63+
// 记录日志信息
64+
func info(args ...interface{}) {
65+
logger.SetPrefix("INFO ")
66+
logger.Println(args...)
67+
}
68+
69+
func danger(args ...interface{}) {
70+
logger.SetPrefix("ERROR ")
71+
logger.Println(args...)
72+
}
73+
74+
func warning(args ...interface{}) {
75+
logger.SetPrefix("WARNING ")
76+
logger.Println(args...)
77+
}
78+
79+
// 异常处理统一重定向到错误页面
80+
func error_message(writer http.ResponseWriter, request *http.Request, msg string) {
81+
url := []string{"/err?msg=", msg}
82+
http.Redirect(writer, request, strings.Join(url, ""), 302)
83+
}

handlers/index.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,13 @@ func Index(writer http.ResponseWriter, request *http.Request) {
1616
}
1717
}
1818
}
19+
20+
func Err(writer http.ResponseWriter, request *http.Request) {
21+
vals := request.URL.Query()
22+
_, err := session(writer, request)
23+
if err != nil {
24+
generateHTML(writer, vals.Get("msg"), "layout", "navbar", "error")
25+
} else {
26+
generateHTML(writer, vals.Get("msg"), "layout", "auth.navbar", "error")
27+
}
28+
}

handlers/post.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ func PostThread(writer http.ResponseWriter, request *http.Request) {
1515
} else {
1616
err = request.ParseForm()
1717
if err != nil {
18-
fmt.Println("Cannot parse form")
18+
danger(err, "Cannot parse form")
1919
}
2020
user, err := sess.User()
2121
if err != nil {
22-
fmt.Println("Cannot get user from session")
22+
danger(err, "Cannot get user from session")
2323
}
2424
body := request.PostFormValue("body")
2525
uuid := request.PostFormValue("uuid")
2626
thread, err := models.ThreadByUUID(uuid)
2727
if err != nil {
28-
fmt.Println("Cannot read thread")
28+
error_message(writer, request, "Cannot read thread")
2929
}
3030
if _, err := user.CreatePost(thread, body); err != nil {
31-
fmt.Println("Cannot create post")
31+
danger(err, "Cannot create post")
3232
}
3333
url := fmt.Sprint("/thread/read?id=", uuid)
3434
http.Redirect(writer, request, url, 302)

handlers/thread.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package handlers
22

33
import (
4-
"fmt"
54
"github.com/xueyuanjun/chitchat/models"
65
"net/http"
76
)
@@ -26,15 +25,15 @@ func CreateThread(writer http.ResponseWriter, request *http.Request) {
2625
} else {
2726
err = request.ParseForm()
2827
if err != nil {
29-
fmt.Println("Cannot parse form")
28+
danger(err, "Cannot parse form")
3029
}
3130
user, err := sess.User()
3231
if err != nil {
33-
fmt.Println("Cannot get user from session")
32+
danger(err, "Cannot get user from session")
3433
}
3534
topic := request.PostFormValue("topic")
3635
if _, err := user.CreateThread(topic); err != nil {
37-
fmt.Println("Cannot create thread")
36+
danger(err, "Cannot create thread")
3837
}
3938
http.Redirect(writer, request, "/", 302)
4039
}
@@ -47,7 +46,7 @@ func ReadThread(writer http.ResponseWriter, request *http.Request) {
4746
uuid := vals.Get("id")
4847
thread, err := models.ThreadByUUID(uuid)
4948
if err != nil {
50-
fmt.Println("Cannot read thread")
49+
error_message(writer, request, "Cannot read thread")
5150
} else {
5251
_, err := session(writer, request)
5352
if err != nil {

logs/chitchat.log

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ERROR 2020/04/07 14:55:39 helper.go:71: sql: no rows in result set Cannot find user

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
func main() {
10-
startWebServer("8080")
10+
startWebServer("8000")
1111
}
1212

1313
// 通过指定端口启动 Web 服务器

routes/routes.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ var webRoutes = WebRoutes{
5555
handlers.Logout,
5656
},
5757
{
58-
"newThread",
59-
"GET",
60-
"/thread/new",
61-
handlers.NewThread,
58+
"newThread",
59+
"GET",
60+
"/thread/new",
61+
handlers.NewThread,
6262
},
6363
{
6464
"createThread",
@@ -78,4 +78,10 @@ var webRoutes = WebRoutes{
7878
"/thread/post",
7979
handlers.PostThread,
8080
},
81+
{
82+
"error",
83+
"GET",
84+
"/err",
85+
handlers.Err,
86+
},
8187
}

views/error.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{{ define "content" }}
2+
3+
<p class="lead">{{ . }}</p>
4+
5+
{{ end }}

0 commit comments

Comments
 (0)