Rumah  >  Artikel  >  Apakah peranan middleware golang?

Apakah peranan middleware golang?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌asal
2023-05-26 11:03:352204semak imbas

Tanggungjawab perisian tengah Golang boleh dipasang dan berdikari Fungsinya ialah: 1. Dalam proses memproses permintaan, memintas, memproses atau menapis permintaan, dan boleh melakukan beberapa operasi sebelum dan selepas memproses permintaan. seperti pengelogan, pengesahan, pemprosesan parameter permintaan, dan lain-lain penulisan kod.

Apakah peranan middleware golang?

Persekitaran pengendalian tutorial ini: sistem Windows 10, GO versi 1.20.1, komputer Dell G3.

Peranan perisian tengah Golang

Tanggungjawab utama perisian tengah ialah boleh dipasang dan berdikari. Semasa proses memproses permintaan, permintaan dipintas, diproses atau ditapis, dan beberapa operasi boleh dilakukan sebelum dan selepas memproses permintaan, seperti pengelogan, pengesahan, pemprosesan parameter permintaan, dsb. Middleware boleh memisahkan logik perniagaan dan meminta pemprosesan dalam struktur kod, menjadikan kod lebih jelas dan lebih mudah untuk diselenggara. Pada masa yang sama, perisian tengah boleh digunakan semula, mengurangkan beban kerja penulisan kod berulang.

Contoh kod adalah seperti berikut:

package main
import (
	"fmt"
	"github.com/devfeel/dotweb"
)

func main() {
	app := dotweb.New()
	// App注册中间件
	app.Use(NewSessionAuth())
	// 开启SESSION
	app.HttpServer.SetEnabledSession(true)
	// 设置路由 输出字符串 Hello Dotweb
	app.HttpServer.GET("/", func(ctx dotweb.Context) error {
		method := ctx.Request().Method
		return ctx.WriteString("Hello Dotweb\n" + "Method:" + method)
	})

	//开启服务 端口号
	fmt.Println("dotweb.StartServer => 8080")
	err := app.StartServer(8080)
	fmt.Println("dotweb.StartServer error => ", err)
}

// SessionAuth 结构体
type SessionAuth struct {
	dotweb.BaseMiddlware
}

// Handle 处理程序
func (m *SessionAuth) Handle(ctx dotweb.Context) error {
	fmt.Println("SessionID = ", ctx.SessionID(), " RequestURI = ", ctx.Request().RequestURI)
	return m.Next(ctx)
}

// NewSessionAuth New
func NewSessionAuth() *SessionAuth {
	sAuth := new(SessionAuth)
	return sAu
}

Bilakah Handle dipanggil?

Mari kita lihat kod sumber BaseMiddlWare:

// BaseMiddleware is the base struct, user defined middleware should extend this
type BaseMiddleware struct {
    next           Middleware
    excludeRouters map[string]struct{}
}

func (bm *BaseMiddleware) SetNext(m Middleware) {
    bm.next = m
}

func (bm *BaseMiddleware) Next(ctx Context) error {
    httpCtx := ctx.(*HttpContext)
    if httpCtx.middlewareStep == "" {
        httpCtx.middlewareStep = middleware_App
    }
    if bm.next == nil {
        if httpCtx.middlewareStep == middleware_App {
            httpCtx.middlewareStep = middleware_Group
            if len(httpCtx.RouterNode().GroupMiddlewares()) > 0 {
                return httpCtx.RouterNode().GroupMiddlewares()[0].Handle(ctx)
            }
        }

        if httpCtx.middlewareStep == middleware_Group {
            httpCtx.middlewareStep = middleware_Router
            if len(httpCtx.RouterNode().Middlewares()) > 0 {
                return httpCtx.RouterNode().Middlewares()[0].Handle(ctx)
            }
        }

        if httpCtx.middlewareStep == middleware_Router {
            return httpCtx.Handler()(ctx)
        }
    } else {
        // check exclude config
        if ctx.RouterNode().Node().hasExcludeMiddleware && bm.next.HasExclude() {
            if bm.next.ExistsExcludeRouter(ctx.RouterNode().Node().fullPath) {
                return bm.next.Next(ctx)
            }
        }
        return bm.next.Handle(ctx)
    }
    return n
}

Melalui kod ini kita mungkin dapat melihat bahawa BaseMiddleware sebenarnya adalah senarai terpaut middlewares nod yang membentuk senarai terpaut, dan terdapat jenis yang berbeza, termasuk perisian tengah Kumpulan dan perisian tengah biasa memutuskan perisian tengah yang hendak dipanggil berdasarkan langkah pemprosesan semasa ctx Akhirnya, pengendali ctx dipanggil Perisian tengah tersuai

dan laksanakan pemegangnya. Pengepala yang diluluskan Nilai tanda di dalam hendaklah konsisten dengan uri + SecretKey dalam fail konfigurasi, iaitu md5

Atas ialah kandungan terperinci Apakah peranan middleware golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn