Goのフレームワーク「echo」でCORSの設定を行う
概要
フロント側はポート番号8080
、サーバーサイド側はポート番号8008
で立てた際にローカル環境でもCORSが起こったのでCORSの設定を行う
サーバー側のサンプルコード
単純にパラメータname
をPOST
するとtasks
テーブルnameを登録できるというアプリです。
※実際にはトークンなども必要ですがここでは割愛します
package main
import (
"database/sql"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.POST("/task", task)
e.Start(":8008")
}
type TaskParam struct {
TaskName string `json:"name"`
}
func dbConnect() *sql.DB {
db, err := sql.Open("mysql", "root:your_db_password/your_db_name")
if err != nil {
panic(err.Error())
}
return db
}
func task(c echo.Context) error {
param := new(TaskParam)
if err := c.Bind(param); err != nil {
return err
}
db := dbConnect()
// insert
ins, err := db.Prepare("INSERT INTO tasks(name) VALUES(?)")
if err != nil {
log.Fatal(err)
panic(err.Error())
}
ins.Exec(param.TaskName)
defer db.Close()
return c.HTML(http.StatusOK, "INSERT OK")
}
通常のCORS設定
単純なGET
とかPOST
、PUT
、DELETE
を許可させる場合は以下のようにe.Use(middleware.CORS())
を追加すればとりあえずローカル環境だけの場合はOKでした。
func main() {
e := echo.New()
// CORSの設定追加
e.Use(middleware.CORS())
e.POST("/task", task)
e.Start(":8008")
}
import
にgithub.com/labstack/echo/middleware
を以下のように追加
import (
"database/sql"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
"github.com/labstack/echo/middleware" // 自動追加されてなければ追加する
"github.com/labstack/echo"
)
厳密なCORSの設定
まだ試してないのですが公式のドキュメントに以下のコードを追加し、AllowOrigins
とAllowMethods
を適切に設定することで異なるドメイン間でもやり取りできるように設定できるみたいです。
func main() {
e := echo.New()
// 厳密にCORSを設定する(以下公式のサンプルコード)
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
AllowOrigins: []string{"https://labstack.com", "https://labstack.net"},
AllowMethods: []string{http.MethodGet, http.MethodPut, http.MethodPost, http.MethodDelete},
}))
e.POST("/task", task)
e.Start(":8008")
}
type TaskParam struct {
TaskName string `json:"name"`
}
参考URL
Author And Source
この問題について(Goのフレームワーク「echo」でCORSの設定を行う), 我々は、より多くの情報をここで見つけました https://qiita.com/sola-msr/items/828e2eb45cf05b1a2ad4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .