diff --git a/_examples/experimental-handlers/cors/simple/main.go b/_examples/experimental-handlers/cors/simple/main.go index 611f664b..a4557b20 100644 --- a/_examples/experimental-handlers/cors/simple/main.go +++ b/_examples/experimental-handlers/cors/simple/main.go @@ -13,14 +13,14 @@ import ( func main() { app := iris.New() - crs := cors.New(cors.Options{ + crs := cors.NewPartyMiddleware(cors.Options{ AllowedOrigins: []string{"*"}, // allows everything, use that to change the hosts. AllowedMethods: router.AllMethods[:], AllowCredentials: true, }) v1 := app.Party("/api/v1") - v1.Use(crs) + v1.ConfigureParty(crs) { v1.Get("/home", func(ctx iris.Context) { ctx.WriteString("Hello from /home") diff --git a/core/router/api_builder.go b/core/router/api_builder.go index a300760c..ab3d3f2c 100644 --- a/core/router/api_builder.go +++ b/core/router/api_builder.go @@ -114,6 +114,14 @@ func NewAPIBuilder() *APIBuilder { return api } +// ConfigureParty configures this party like `iris.Application#Configure` +// That allows middlewares focused on the Party like CORS middleware +func (api *APIBuilder) ConfigureParty(conf ...PartyConfigurator) { + for _, h := range conf { + h(api) + } +} + // GetRelPath returns the current party's relative path. // i.e: // if r := app.Party("/users"), then the `r.GetRelPath()` is the "/users". diff --git a/core/router/party.go b/core/router/party.go index a70c6030..8a91e727 100644 --- a/core/router/party.go +++ b/core/router/party.go @@ -9,11 +9,18 @@ import ( // Party is here to separate the concept of // api builder and the sub api builder. +// PartyConfigurator is handler for configuring a party (it works with iris.Application) +type PartyConfigurator func(party Party) + // Party is just a group joiner of routes which have the same prefix and share same middleware(s) also. // Party could also be named as 'Join' or 'Node' or 'Group' , Party chosen because it is fun. // // Look the "APIBuilder" for its implementation. type Party interface { + // ConfigureParty configures this party like `iris.Application#Configure` + // That allows middlewares focused on the Party like CORS middleware + ConfigureParty(...PartyConfigurator) + // GetRelPath returns the current party's relative path. // i.e: // if r := app.Party("/users"), then the `r.GetRelPath()` is the "/users".