2020-06-09 21:12:11 +02:00
|
|
|
// Package main integrates the "rs/cors" net/http middleware into Iris.
|
|
|
|
// That cors third-party middleware cannot be registered through `iris.FromStd`
|
|
|
|
// as a common middleware because it should be injected before the Iris Router itself,
|
|
|
|
// it allows/dissallows HTTP Methods too.
|
|
|
|
//
|
|
|
|
// This is just an example you can use to run something, based on custom logic,
|
|
|
|
// before the Iris Router itself.
|
|
|
|
//
|
|
|
|
// In the "routing/custom-wrapper" example
|
|
|
|
// we learn how we can acquire and release an Iris context to fire an Iris Handler
|
|
|
|
// based on custom logic, before the Iris Router itself. In that example
|
|
|
|
// we will fire a net/http handler (the "rs/cors" handler one) instead.
|
|
|
|
//
|
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/kataras/iris/v12"
|
|
|
|
"github.com/rs/cors"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
app := iris.New()
|
|
|
|
c := cors.New(cors.Options{
|
|
|
|
AllowedOrigins: []string{"*"},
|
|
|
|
AllowCredentials: true,
|
|
|
|
// Enable Debugging for testing, consider disabling in production
|
|
|
|
Debug: true,
|
|
|
|
})
|
|
|
|
// app.WrapRouter(func(w http.ResponseWriter, r *http.Request, router http.HandlerFunc) {
|
|
|
|
// [custom logic...]
|
|
|
|
// if shouldFireNetHTTPHandler {
|
|
|
|
// ...ServeHTTP(w,r)
|
|
|
|
// return
|
|
|
|
// }
|
|
|
|
// router(w,r)
|
|
|
|
// })
|
|
|
|
// In our case, the cors package has a ServeHTTP
|
|
|
|
// of the same form of app.WrapRouter's accept input argument,
|
|
|
|
// so we can just do:
|
|
|
|
app.WrapRouter(c.ServeHTTP)
|
|
|
|
|
|
|
|
// Serve ./public/index.html, main.js.
|
2020-07-24 12:03:49 +02:00
|
|
|
app.HandleDir("/", iris.Dir("./public"))
|
2020-06-09 21:12:11 +02:00
|
|
|
|
|
|
|
// Register routes here...
|
|
|
|
app.Get("/data", listData)
|
|
|
|
|
|
|
|
// http://localhost:8080 and click the "fetch data" button.
|
|
|
|
app.Listen(":8080")
|
|
|
|
}
|
|
|
|
|
|
|
|
type item struct {
|
|
|
|
Title string `json:"title"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func listData(ctx iris.Context) {
|
|
|
|
ctx.JSON([]item{
|
|
|
|
{"Item 1"},
|
|
|
|
{"Item 2"},
|
|
|
|
{"Item 3"},
|
|
|
|
})
|
|
|
|
}
|