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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

API

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

React.js

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

Q&A

1回答

3056閲覧

【status code 0って何?】Fetchの返り値でJSONを取得したい

ryota002

総合スコア18

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

API

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

React.js

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

0グッド

0クリップ

投稿2021/05/24 23:38

編集2021/05/24 23:52

前提・実現したいこと

TypescriptとReactを使って、英単語クイズアプリを作成しています。
今回実現したいことは、以下2つです。

  • 自作のAPIを叩き、JSONデータを取得。
  • その後、JSONデータをReactで扱いたい

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

  • 「status code 0」となってしまい通信がうまくいっていない

fetchで自作のAPIを叩いてJSONデータを取得し、得た値を用いてコンポーネントを描画させようとした。
その結果、以下の様なlogがChromeのコンソールに吐き出されました。
イメージ説明

問題が発生している状況としては、以下の様な形です。

  • firebase cloud functionsで作成した自作のAPIをfetchで叩いた
  • ブラウザで直接URLを打ち込むとJSONデータが返ってくる(文章末尾に添付画像あり)

該当のソースコード

App.tsx(フロント側でAPIを叩いている部分)

typescript

1import React, { useState, useEffect } from "react"; 2 3export const App = (): JSX.Element => { 4 5***中略*** 6 7 useEffect(() => { 8 (async () => { 9 const res = await fetch( 10 "https://***/rUser", 11 { 12 mode: "no-cors", 13 } 14 ); 15 console.log(res); 16 })(); 17 }, []); 18 19 return( 20 ***中略*** 21 ); 22}:

index.ts(作成したAPI。Cloud Functionsを利用)

typescript

1export const rUser = functions 2 .region("asia-northeast1") 3 .https.onRequest(async (req, res) => { 4 const userRef = db.collection("User").doc("**id**"); 5 const doc = await userRef.get(); 6 7 const userData = doc.data(); 8 9 res.json(userData); 10 });

試したこと

  • fetchの第二引数での設定に関して
  • APIの返り値の渡し方

この2点に注目して調べていたのですが、解決に繋がる情報が全く見つかりませんでした。
もしかしたら注目する部分が違いのかもしれないと思い、今回の質問に至った次第です。

補足情報(FW/ツールのバージョンなど)

フロントエンド、Reactに関連するPackage.json(依存関係)

"devDependencies": { "@chakra-ui/react": "^1.6.1", "@emotion/react": "^11.4.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.5", "@types/react-dom": "^17.0.5", "@types/react-router-dom": "^5.1.7", "css-loader": "^5.2.4", "eslint-config-prettier": "^8.3.0", "file-loader": "^6.2.0", "firebase-admin": "^9.8.0", "firebase-functions": "^3.14.0", "framer-motion": "^4.1.16", "html-webpack-plugin": "^5.3.1", "react-icons": "^4.2.0", "react-responsive-carousel": "^3.2.18", "style-loader": "^2.0.0", "ts-loader": "^9.1.2", "typescript": "^4.2.4", "webpack": "^5.37.0", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.2" }, "dependencies": { "react": "^17.0.2", "react-dom": "^17.0.2", "react-router-dom": "^5.2.0" }

cloud functionsに関するpackage.json(依存関係)

json

1 "dependencies": { 2 "firebase-admin": "^9.2.0", 3 "firebase-functions": "^3.11.0" 4 }, 5 "devDependencies": { 6 "@typescript-eslint/eslint-plugin": "^3.9.1", 7 "@typescript-eslint/parser": "^3.8.0", 8 "eslint": "^7.6.0", 9 "eslint-config-google": "^0.14.0", 10 "eslint-plugin-import": "^2.22.0", 11 "firebase-functions-test": "^0.2.0", 12 "typescript": "^3.8.0" 13 }

ブラウザで直接APIのURLを打ち込んだ結果

イメージ説明

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

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

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

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

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

guest

回答1

0

mode: "no-cors"を明示していますが、それでクロスドメインとなった場合、Opaque Requestとなり結果を得ることはできません

Firebase側、ブラウザ側の両方でCORSに対応した形のコードを書く必要があります。

投稿2021/05/25 00:04

maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問