Go의 프레임 워크 "echo"에서 CORS를 설정합니다.

9661 단어 5CORSecho

개요



프론트 측은 포트 번호 8080 , 서버 측 측은 포트 번호 8008
다음 오류 발생시 Chrome의 콘솔 부분


서버측 샘플 코드



간단히 파라미터 name※실제로는 토큰등도 필요합니다만 여기에서는 할애합니다

main.go
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 설정



단순한 POST 라든지 tasks , GET , POST 를 허가시키는 경우는 이하와 같이 PUT
main.go
func main() {

    e := echo.New()

    // CORSの設定追加
    e.Use(middleware.CORS())

    e.POST("/task", task)

    e.Start(":8008")
}
DELETEe.Use(middleware.CORS()) 를 다음과 같이 추가

main.go
import (
    "database/sql"
    "log"
    "net/http"

    _ "github.com/go-sql-driver/mysql"

    "github.com/labstack/echo/middleware" // 自動追加されてなければ追加する
    "github.com/labstack/echo"
)

엄격한 CORS 설정



아직 시도하지 않았지만 공식 문서에 다음 코드를 추가하고 importgithub.com/labstack/echo/middleware를 올바르게 설정하여 다른 도메인간에 상호 작용할 수 있도록 설정할 수있는 것 같습니다.

main.go
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


  • CORS Recipe | Echo - High performance, minimalist Go web framework
  • 좋은 웹페이지 즐겨찾기