1. 程式人生 > 實用技巧 >ES5中新增的一些方法

ES5中新增的一些方法

一、beego 日誌處理

1、Beego 日誌的基本使用

beego 的日誌處理是基於 logs 模組搭建的,內建了一個變數 BeeLogger,預設已經是 logs.BeeLogger 型別,初始化了 console,也就是預設輸出到 console。
一般在程式中我們使用如下的方式進行輸出:

package controllers

import (
	"github.com/astaxie/beego"
)

type MainController struct {
	beego.Controller
}

func (c *MainController) Get() {
	// fmt.Printf("你好golang")
	// fmt.Println("你好golang")

	beego.Info("你好golang")

	beego.Error("我是一個錯誤資訊")

	beego.Warning("我是一個警告資訊")

	beego.Notice("我是一個通知資訊")

	beego.Debug("我是一個除錯資訊")

	c.TplName = "index.html"
}

2、Beego日誌儲存到檔案

我們的程式往往期望把資訊輸出到 log 中,現在設定輸出到檔案很方便,如下所示:

beego.SetLogger("file", `{"filename":"logs/test.log"}`)

更多詳細的日誌配置請檢視:https://beego.me/docs/module/logs.md
這個預設情況就會同時輸出到兩個地方,一個 console,一個 file,如果只想輸出到檔案, 就需要呼叫刪除操作:

beego.BeeLogger.DelLogger("console")
package main

import (
	"beego_log_error/controllers"
	_ "beego_log_error/routers"

	"github.com/astaxie/beego"
)

func main() {

	//設定日誌輸出的目錄
	beego.SetLogger("file", `{"filename":"logs/test.log"}`)

	beego.Run()
}

二、beego 錯誤處理

1、頁面跳轉

我們在做 Web 開發的時候,經常需要頁面跳轉和錯誤處理,beego 這方面也進行了考慮, 通過 Redirect 方法來進行跳轉:

func (this *AddController) Get() { 
    this.Redirect("/", 302)
}

跳轉的時候注意後面的狀態碼

2、請求中的異常丟擲

func (this *MainController) Get() {
	this.Abort("401")
	v := this.GetSession("asta")
	if v == nil {
		this.SetSession("asta", int(1))
		this.Data["Email"] = 0
	} else {
		this.SetSession("asta", v.(int)+1)
		this.Data["Email"] = v.(int)
	}
	this.TplName = "index.tpl"
}

這樣 this.Abort("401") 之後的程式碼不會再執行,而且會預設顯示給使用者如下頁面:

3、自定義異常頁面

beego 框架預設支援 401、403、404、500、503 這幾種錯誤的處理。使用者可以自定義相應 的錯誤處理,例如下面重新定義 404 頁面:

func page_not_found(rw http.ResponseWriter, r *http.Request) {
	t, _ := template.New("404.html").ParseFiles(beego.BConfig.WebConfig.ViewsPath + "/404.html")
	data := make(map[string]interface{})
	data["content"] = "page not found"
	t.Execute(rw, data)
}
func main() {
	beego.ErrorHandler("404", page_not_found)
	beego.Router("/", &controllers.MainController{})
	beego.Run()
}

我們可以通過自定義錯誤頁面 404.html 來處理 404 錯誤。
beego 更加人性化的還有一個設計就是支援使用者自定義字串錯誤型別處理函式,例如下面 的程式碼,使用者註冊了一個數據庫出錯的處理頁面:

func dbError(rw http.ResponseWriter, r *http.Request) {
	t, _ := template.New("dberror.html").ParseFiles(beego.BConfig.WebConfig.ViewsPath + "/dberro r.html")
	data := make(map[string]interface{})
	data["content"] = "database is now down"
	t.Execute(rw, data)
}
func main() {
	beego.ErrorHandler("dbError", dbError)
	beego.Router("/", &controllers.MainController{})
	beego.Run()
}

一旦在入口註冊該錯誤處理程式碼,那麼你可以在任何你的邏輯中遇到資料庫錯誤呼叫 this.Abort("dbError") 來進行異常頁面處理。

4、Controller 定義 Error(推薦)

package controllers

import (
	"github.com/astaxie/beego"
)

type ErrorController struct{ beego.Controller }

func (c *ErrorController) Error404() {
	c.Data["content"] = "page not found"
	c.TplName = "errors/404.html"
}
func (c *ErrorController) Error500() {
	c.Data["content"] = "server error"
	c.TplName = "errors/501.html"
}
func (c *ErrorController) Error501() {
	c.Data["content"] = "server error"
	c.TplName = "errors/501.html"
}

在main中配置

package main

import (
	"beego_log_error/controllers"
	_ "beego_log_error/routers"

	"github.com/astaxie/beego"
)

func main() {

	//配置錯誤處理的控制器
	beego.ErrorController(&controllers.ErrorController{})

	beego.Run()
}