@saga_iori

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

デプロイ後にAPI通信ができなくなりました

解決したいこと

vercelからherokuの自作APIを叩きたい

Webアプリを作成し、クライアント側をvercel、サーバー側をherokuへ
デプロイしましたが、API通信ができなくなってしまいました。
解決方法を教えて下さい。

発生している問題・エラー

ローカル開発環境でできていたAPI通信がデプロイ後にできなくなってしまった

該当するソースコード

クライアントはReact、サーバーはNodejsを使用

クライアント側

Products.jsx

  const handleDataFetch = async (page) => {
    try {
      const response = await axios.get(`/${page}/all`); //pageには文字列を代入
      dispatch(setItems(response.data));
    } catch(err) {
      console.log(err);
    }
  };

package.json

{
    {...},
    "proxy": "https://<appName>.herokuapp.com/api"
}

サーバー側

server.js

const express = require("express");
const app = express();
const port = process.env.PORT || 4001;
require('dotenv').config();
const cors = require('cors');

//////CONNECT DB//////
const mongoose = require("mongoose");
mongoose
  .connect(process.env.MONGO_URL)
  .then(() => console.log("connect MongoDB"))
  .catch(() => console.log("disconnected MongoDB"));

//////MIDDLE WARE//////
app.use(cors());
app.use(express.json());
const productRouter = require("./routes/product");
const itemRouter = require("./routes/item");
app.use("/api/products", productRouter);
app.use("/api/items", itemRouter);

//////Listen PORT//////
app.listen(port, () => console.log(`App listening on port ${port}`));

自分で試したこと

サーバー側をherokuへデプロイ後、localhost:3000からAPIを叩き正常に動作することを確認

CORS設定が不十分である可能性を考慮し、vercel.jsonを作成。
以下のコードを追加し再デプロイ *現在は削除済み

{
    "routes": [
        {
          "src": "/api/*",
          "methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
          "headers": {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
            "Access-Control-Allow-Headers": "Content-Type"
          }
        }
      ]
}
0 likes

1Answer

ローカルからAPIを叩くことができたのであれば、サーバ側の設定で特定のIP(vercel)からのアクセス許可が問題かもしれません。念のためご確認ください。

0Like

Comments

  1. @saga_iori

    Questioner

    アドバイスいただきありがとうございます。
    vercelのroutes設定を再度作成し
    destをherokuのアドレスにしたところ無事解決しました。

Your answer might help someone💌