質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2456閲覧

React Golang CROS設定エラー

Shika_Tech

総合スコア13

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/01/29 01:52

編集2021/01/29 03:10

前提・実現したいこと

React×Redux (port:3000)
Go (port:8080)
でSPAを作っています。

GoのAPIを叩くときにCROSのエラーに遭遇してしまいます。
この問題は何度も遭遇しており、解決したと思ったら新しいAPIを叩く度に直面します。

基本的な設定は行なっているはずなのですが、何が原因かわからず困っています。
お力を貸して頂けると幸いです。

発生している問題・エラーメッセージ

Access to XMLHttpRequest at 'http://localhost:8080/login' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

イメージ説明

こちらはloginAPI(post)を叩いた時に遭遇しました。
しかしながら、何度かこの問題にぶつかった時にapiのheaderとaxios側でcrosの設定をし、
別のgetAPIではエラーを回避しました。

またpostmanでapiを叩いた時headerに
Allow-OriginなどGoで設定したheaderが問題なく付与されている事も確認しております。

イメージ説明

該当のソースコード

Goでのheader設定

go

1 w.Header().Set("Content-Type", "application/json") 2 w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000") 3 w.Header().Set("Access-Control-Allow-Credentials", "true") 4

react axiosの設定

axios.defaults.baseURL = 'http://localhost:8080'; axios.defaults.headers.post['Content-Type'] = 'application/json';

エラーが出ているpostしているコード

react

1export const signIn = (email, password) => { 2 return async (dispatch) => { 3 try { 4 const response = await axios.post('/login', { 5 email: email, 6 password: password, 7 }); 8 const data = response.data; 9 dispatch( 10 signInAction({ 11 isSignedIn: true, 12 }) 13 ); 14 } catch (error) { 15 console.log(error); 16 } 17 }; 18};

成功しているgetapiを叩いているコード

react

1 useEffect(() => { 2 async function fetchTickers() { 3 try { 4 const response = await axios.get(`/ticker?symbol=^skew`); 5 const data = response.data; 6 setChartAry([...chartAry, [...data.daily]]); 7 } catch (error) { 8 console.log(error); 9 setChartAry([]); 10 } 11 } 12 fetchTickers(); 13 }, []);

試したこと

Qiitaなどでヒットする解決作は一通り試しました。
また、ブラウザ自体の問題の可能性も考え,キャッシュクリアなども行いました。

getとpostによるaxiosの違いでしょうか?
また、どのようにデバッグすればよろしいでしょうか?

ご教示頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

gorilla/muxでメソッドにバリデーションがかかっていました。

- r.HandleFunc("/login", app.loginHandler).Methods("POST") + r.HandleFunc("/login", app.loginHandler).Methods("POST", "OPTIONS")

またプリフライトに対応する必要がありました。

if r.Method == "OPTIONS" { w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000") w.Header().Set("Access-Control-Allow-Credentials", "true") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") w.WriteHeader(http.StatusOK) return }

投稿2021/01/29 09:50

Shika_Tech

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問