[docs] Add example usage for Route.HeadersRegexp (#320)
* Add example usage for Route.HeadersRegexp * Improve example_route_test.go style
This commit is contained in:
51
example_route_test.go
Normal file
51
example_route_test.go
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package mux_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
)
|
||||||
|
|
||||||
|
// This example demonstrates setting a regular expression matcher for
|
||||||
|
// the header value. A plain word will match any value that contains a
|
||||||
|
// matching substring as if the pattern was wrapped with `.*`.
|
||||||
|
func ExampleRoute_HeadersRegexp() {
|
||||||
|
r := mux.NewRouter()
|
||||||
|
route := r.NewRoute().HeadersRegexp("Accept", "html")
|
||||||
|
|
||||||
|
req1, _ := http.NewRequest("GET", "example.com", nil)
|
||||||
|
req1.Header.Add("Accept", "text/plain")
|
||||||
|
req1.Header.Add("Accept", "text/html")
|
||||||
|
|
||||||
|
req2, _ := http.NewRequest("GET", "example.com", nil)
|
||||||
|
req2.Header.Set("Accept", "application/xhtml+xml")
|
||||||
|
|
||||||
|
matchInfo := &mux.RouteMatch{}
|
||||||
|
fmt.Printf("Match: %v %q\n", route.Match(req1, matchInfo), req1.Header["Accept"])
|
||||||
|
fmt.Printf("Match: %v %q\n", route.Match(req2, matchInfo), req2.Header["Accept"])
|
||||||
|
// Output:
|
||||||
|
// Match: true ["text/plain" "text/html"]
|
||||||
|
// Match: true ["application/xhtml+xml"]
|
||||||
|
}
|
||||||
|
|
||||||
|
// This example demonstrates setting a strict regular expression matcher
|
||||||
|
// for the header value. Using the start and end of string anchors, the
|
||||||
|
// value must be an exact match.
|
||||||
|
func ExampleRoute_HeadersRegexp_exactMatch() {
|
||||||
|
r := mux.NewRouter()
|
||||||
|
route := r.NewRoute().HeadersRegexp("Origin", "^https://example.co$")
|
||||||
|
|
||||||
|
yes, _ := http.NewRequest("GET", "example.co", nil)
|
||||||
|
yes.Header.Set("Origin", "https://example.co")
|
||||||
|
|
||||||
|
no, _ := http.NewRequest("GET", "example.co.uk", nil)
|
||||||
|
no.Header.Set("Origin", "https://example.co.uk")
|
||||||
|
|
||||||
|
matchInfo := &mux.RouteMatch{}
|
||||||
|
fmt.Printf("Match: %v %q\n", route.Match(yes, matchInfo), yes.Header["Origin"])
|
||||||
|
fmt.Printf("Match: %v %q\n", route.Match(no, matchInfo), no.Header["Origin"])
|
||||||
|
// Output:
|
||||||
|
// Match: true ["https://example.co"]
|
||||||
|
// Match: false ["https://example.co.uk"]
|
||||||
|
}
|
||||||
3
route.go
3
route.go
@@ -258,7 +258,8 @@ func (m headerRegexMatcher) Match(r *http.Request, match *RouteMatch) bool {
|
|||||||
// "X-Requested-With", "XMLHttpRequest")
|
// "X-Requested-With", "XMLHttpRequest")
|
||||||
//
|
//
|
||||||
// The above route will only match if both the request header matches both regular expressions.
|
// The above route will only match if both the request header matches both regular expressions.
|
||||||
// It the value is an empty string, it will match any value if the key is set.
|
// If the value is an empty string, it will match any value if the key is set.
|
||||||
|
// Use the start and end of string anchors (^ and $) to match an exact value.
|
||||||
func (r *Route) HeadersRegexp(pairs ...string) *Route {
|
func (r *Route) HeadersRegexp(pairs ...string) *Route {
|
||||||
if r.err == nil {
|
if r.err == nil {
|
||||||
var headers map[string]*regexp.Regexp
|
var headers map[string]*regexp.Regexp
|
||||||
|
|||||||
Reference in New Issue
Block a user