お世話になっております。
現在以下のような環境でReactからAPIをリクエストしてJSONを取得したいと思っていますが、うまくいきません。
原因がわからないため、わかる方がいらっしゃいましたら、教えてください。
##エラーメッセージ
Error: Request has been terminated Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.
##開発環境
同じDokcer-コンテナ上に api.localhostのLaravelを立ち上げて、アプリ側からリクエストを出す形になります。
##原因の切り分け
原因を切り分けるために以下の試しました。
- ブラウザのアドレスバーに直接api.localhost・・・を書いてアクセス→JSONが表示される
- Condeigniterコンテナに入り内側からcurlでapiを叩く→JSONが表示される
- localhostから別のapiを叩く(qiita)→JSONが表示される
という風にいずれもjsonが表示されているので、apiサーバー(Laravel)の問題かと思い、Laravelのレスポンスヘッダーの設定も行いましたが、うまくいきませんでした。
##Laravelの設定
ミドルウェアを作り許可
app/Http/Middleware/Cros.php
public function handle($request, Closure $next) { return $next($request) ->header('Access-Control-Allow-Origin', '*') ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') ->header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With') ->header('Access-Control-Allow-Credentials: true'); }
app/Http/Kernel.php > $routedMiddleware
'cors' => \App\Http\Middleware\Cors::class,
routes/web.php
Route::group(['middleware' => ['cors'], 'prefix' => 'api'], function ($router) { // routes here ... });
##Reactからのリクエスト
request .get('http://api.location/api/movie') .query({limit: 5}) .set('Content-Type', 'application/json') .set('Accept', 'application/json') .end((error, res) => { if (!error && res.status === 200) { console.log(JSON.parse(res.text)) } else { console.log(error) } })
##他にやった事
ChromeにCORSという拡張機能を入れてレスポンスヘッダーにAllow:*が付くように設定
##バージョン
・Laravel:5.5
・React: 8.9.3
どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/02 06:32
2018/05/02 16:14