No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

1D
15H
0M
26S

Agregando Middlewares

34/42
Recursos

El profesor menciona la funci贸n AddMidleware, aqu铆 te la dejamos.

func AddMidleware( f http.HandlerFunc, 
middlewares ...Middleware)
http.HandlerFunc {
for _, m := range middlewares {
f=(f)
}
return f
}

Aportes 14

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

驴En que momento se agrego la funci贸n AddMiddleware?

No se si es mi impresi贸n pero en este video me acorde de JS y sus callback en el callback del callback鈥

type Middleware func(http.HandlerFunc) http.HandlerFunc

Se defini贸 un type Middleware que recibe y retorne http.HandlerFunc as铆 todas las funciones que cuenten con esta firma se considerar谩n de tipo Middleware. Reciben y retornan lo mismo, para poder encadenarse y pasar el request entre varios middleware, hasta llegar al handler.

Algo interesante de esta definici贸n es como Middleware tiene un type func como par谩metro, significa que recibir谩 una funci贸n como argumento que tiene una firma definida http.HandlerFunc.

El operador elipsis (鈥) sirve para determinar una cantidad variable de parametros de un mismo tipo.

// Va a recibir una cantidad variable de argumentos de tipo Middleware
func example (middlewares ...Middleware) {}

驴El middlewares es una pieza de software en medio de otras dos?

Aqui esta la funcion completa:

func AddMidleware(f http.HandlerFunc, middlewares ...Middleware) http.HandlerFunc {
	for _, m := range middlewares {
		f = m(f)
	}

	return f
}
func CheckAuth() Middleware {
...
}

Quiere decir que ++ checkAuth() hace return un Middleware ++, no qu茅 CheckAuth() es de tipo middleware. O me equivoco? (03:00)

Me tomo un poco de tiempo entender esto, aqui les dejo mis apuntes:

// checkAuth: funcion que no tiene parametros y devuelve una funcion de tipo Middleware
func CheckAuth() Middleware {

	// Aqui estamos haciendo return nuestro Middleware
	// (Middleware es una funcion que toma http.HandlerFunc como parametro 
	// y devuelve otra http.HandlerFunc)
	return func(f http.HandlerFunc) http.HandlerFunc {

		// Como Middleware devuelve un http.HandlerFunc, aqui estamos implementando 
		// ese HandlerFunc (http.HandlerFunc es una funcion que tiene 
		// http.ResponseWriter y *http.Request como parametros)
		return func(w http.ResponseWriter, r *http.Request) {
			flag := false
			fmt.Println("Checking Authentication")

			if flag {
				f(w, r)
			} else {
				return
			}
		}
	}
}

Lo que me quedo de esta clase es que al final los Middleware son Handlers tambi茅n. Seguimos鈥

Empez贸 explicando de atr谩s para adelante

Los middleware son handler que reciben cierta logica y determinar si siguen o no

func (s *Server) AddMiddleware(f http.HandlerFunc, middlewares 鈥iddleware) http.HandlerFunc {
for _, m := range middlewares {
f = m(f)
}
return f
}

Magasho

驴Por qu茅 usamos el operador para indicar que vamos a mandar varios handlers y no usamos un slice como par谩metro?

CheckAuth es un hilos de handler