Статья впервые опубликована в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:8080
port, наш журнал нового формата будет напечатан на консоли.
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
Личный публичный аккаунт
Я только недавно подал заявку на публичный аккаунт, и в будущем статьи будут отправляться синхронно.Приглашаю всех обратить внимание