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

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

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

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

Q&A

解決済

1回答

1227閲覧

自作APIからデータが取得できない (CrossDomain)

alberorana

総合スコア52

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

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

0グッド

0クリップ

投稿2018/05/01 04:39

お世話になっております。
現在以下のような環境で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.

##開発環境
Docker-compose
同じ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

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Condeigniterコンテナに入り内側からcurlでapiを叩く→JSONが表示される

Condeigniterのプログラムがバグってるっぽいですね。ソースのrequestオブジェクトのrequire元がわからないので何とも言えませんがnode-rest-client moduleで簡単にできそうです。

https://www.npmjs.com/package/node-rest-client

example

var Client = require('node-rest-client').Client; var client = new Client(); // direct way client.get("http://remote.site/rest/xml/method", function (data, response) { // parsed response body as js object console.log(data); // raw response console.log(response); }); // registering remote methods ★★★★jsonならこっちっぽいですかね↓↓↓↓ client.registerMethod("jsonMethod", "http://remote.site/rest/json/method", "GET"); client.methods.jsonMethod(function (data, response) { // parsed response body as js object console.log(data); // raw response console.log(response); });

投稿2018/05/01 18:41

mosapride

総合スコア1480

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

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

alberorana

2018/05/02 06:32

ご回答ありがとうございます! 無事に取得できました!ただ、なぜ以前のコードがだめだったのか、わからないので、教えていただけないでしょうか? 質問に記載したrequestの元(おそらく何もimportしていなかった)のが原因でしょうか? ご回答いただいたnode-rest-client moduleはnpmからインストールしました。 お手数ですが、教えていただけますと幸いです。
mosapride

2018/05/02 16:14

Reactは使った事がないので詳しいことはわからないです。 現象から見てプログラムがおかしいなと思っただけなのでorz
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問