Джин (семь): использование и определение промежуточного программного обеспечения

Go Gin
Джин (семь): использование и определение промежуточного программного обеспечения

Статья впервые опубликована вISLAND

промежуточное ПОmiddlewareсуществуетgolangочень важное понятие вjavaСредние перехватчики аналогичны. Взгляните на использование кода промежуточного слоя в исходном коде gin.

🎮 Использование промежуточного программного обеспечения

мы вернулисьinitRouterсерединаSetupRouterСюда.

router := gin.Default()

Наш проект начался с этой строки кода, поэтому давайте посмотрим, что делает эта строка кода. ОткрытымDefaultисходный код,

func Default() *Engine {
	debugPrintWARNINGDefault()
	engine := New()
	engine.Use(Logger(), Recovery())
	return engine
}

В исходном коде первыйNewвзял одинengine, с последующимUseметод, переданный вLogger()иRecovery()LoggerиRecoveryВсего два мидлвара.

вLoggerведет журнал, иRecoveryда даpainc, выполнить обработку 500 ошибок

После просмотра исходного кода мы также знаем, как использовать промежуточное ПО.

📝 Настройка промежуточного программного обеспечения

Промежуточное ПО должно вернутьсяgin.HandlerFuncфункция, поэтому определите функцию возврата.

И промежуточное ПО имеетNextФункция среди многих промежуточных программ, которые мы определяем, образует цепочку промежуточных программ, и черезNextдля выполнения следующего промежуточного программного обеспечения.NextФункция выполняется перед запросом, иNextВедь функция выполняется после запроса.

Давайте определим наши собственныеLoggerвойти, создать новыйmiddlewareпапка, новая внутриLogger.go, для нашего пользовательского отображения журнала.

package middleware

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"time"
)

func Logger() gin.HandlerFunc {
	return func(context *gin.Context) {
		host := context.Request.Host
		url := context.Request.URL
		method := context.Request.Method
		fmt.Printf("%s::%s \t %s \t %s ", time.Now().Format("2006-01-02 15:04:05"), host, url, method)
		context.Next()
		fmt.Println(context.Writer.Status())
	}
}

глобальное промежуточное ПО

ИсправлятьinitRouterсерединаSetupRouterметод для добавления нашего пользовательского промежуточного программного обеспечения.

router := gin.New()
// 添加自定义的 logger 中间件
router.Use(middleware.Logger(), gin.Recovery())

Перезапустите наш проект в это время, посетитеlocalhost:8080port, наш журнал нового формата будет напечатан на консоли.

2019-07-23 18:17:58::localhost:8080 / GET 200

Конечно, в этот моментLoggerПромежуточное ПО используется глобально, и мы также можем использовать его для определенных маршрутов.

локальное промежуточное ПО

Например, если мы оговорим, что некоторые маршруты должны быть зарегистрированы, прежде чем к ним можно будет получить доступ, мы можем авторизовать и управлять этими маршрутами.

мы переписываемAuthПромежуточное ПО используется для управления. Промежуточное ПО здесь специально не реализовано. Оно будет реализовано позже. Здесь оно только отображается.

package middleware

import "github.com/gin-gonic/gin"

func Auth() gin.HandlerFunc {
	return func(context *gin.Context) {
		println("已经授权")
		context.Next()
	}
}

Мы добавляем это промежуточное программное обеспечение на пути изменения информации о пользователе и отображения информации о пользователе.

userRouter.GET("/profile/", middleware.Auth(), handler.UserProfile)
userRouter.POST("/update", middleware.Auth(), handler.UpdateUserProfile)

Запустите проект еще раз, когда мы получим доступ к странице сведений о пользователе, журнал Authorized будет напечатан на консоли, но не появится при доступе к другим страницам, что указывает на успешное использование нашего промежуточного программного обеспечения.

✍Резюме

Благодаря этому пониманию промежуточного программного обеспечения я в основном освоил, как писать и использовать промежуточное программное обеспечение.Существуют также различные методы использования и области применения для глобального и локального промежуточного программного обеспечения.

👩‍💻 Код для этой главы

Github

📰 Исторические статьи

Джин (1): Привет
Джин (2): маршрутизатор маршрутизации
Джин (три): шаблон tmpl
Джин (четыре): проверка отправки формы и привязка модели
Джин (5): подключиться к MySQL
Джин (шесть): загрузка файла
Джин (семь): использование и определение промежуточного программного обеспечения Джин (8): использование файлов cookie

Личный публичный аккаунт

Я только недавно подал заявку на публичный аккаунт, и в будущем статьи будут отправляться синхронно.Приглашаю всех обратить внимание