前提・実現したいこと
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を打ち込んだ結果
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。