Статья впервые опубликована в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 будет напечатан на консоли, но не появится при доступе к другим страницам, что указывает на успешное использование нашего промежуточного программного обеспечения.
✍Резюме
Благодаря этому пониманию промежуточного программного обеспечения я в основном освоил, как писать и использовать промежуточное программное обеспечение.Существуют также различные методы использования и области применения для глобального и локального промежуточного программного обеспечения.
👩💻 Код для этой главы
📰 Исторические статьи
Джин (1): Привет
Джин (2): маршрутизатор маршрутизации
Джин (три): шаблон tmpl
Джин (четыре): проверка отправки формы и привязка модели
Джин (5): подключиться к MySQL
Джин (шесть): загрузка файла
Джин (семь): использование и определение промежуточного программного обеспечения
Джин (8): использование файлов cookie
Личный публичный аккаунт
Я только недавно подал заявку на публичный аккаунт, и в будущем статьи будут отправляться синхронно.Приглашаю всех обратить внимание