Я впервые пишу о помощи, поэтому, пожалуйста, потерпите меня.
Я создал приложение для реагирования, которое использует экспресс для создания платежных намерений с помощью Stripe. Локально на моей машине приложение работает отлично. Я могу перейти на страницу, которая извлекает метод POST и создает платежное намерение, которое я вижу на панели инструментов Stripe. Однако, когда я загружаю на Heroku, каждый раз, когда я захожу на страницу, я сразу же получаю ошибку 405 Not Allowed для моего метода публикации.
Я заметил, что заголовок ответа был установлен как текстовый/обычный, и попытался изменить его на JSON, используя res.type('json'), однако ошибка по-прежнему показывала, что заголовок ответа был установлен на текстовый/обычный. Я не совсем знаю, в этом ли дело. Любая помощь будет очень признательна.
Снимок экрана с ошибкой Скриншот успеха на моем локальном компьютере
Файл server.js.
const express = require("express");
const app = express();
const { resolve } = require("path");
const path = require('path');
const cors = require('cors')
// This is your real test secret API key.
const stripe = require("stripe")(hidden);
const PORT = process.env.PORT || 4242;
app.use(express.static("."));
app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, 'build')));
app.get('/*', (req, res) => {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
const calculateOrderAmount = items => {
let result = items.map(a => a.qty * 1500);
const reducer = (accumulator, currentValue) => accumulator + currentValue;
return result.reduce(reducer, 500)
};
app.post("/create-payment-intent", async (req, res) => {
const { items } = req.body;
// Create a PaymentIntent with the order amount and currency
const paymentIntent = await stripe.paymentIntents.create({
amount: calculateOrderAmount(items),
currency: "usd",
payment_method_types: ['card'],
});
res.send({
clientSecret: paymentIntent.client_secret
});
});
Функция, вызывающая запрос POST внутри моей функции React
useEffect(() => {
// Create PaymentIntent as soon as the page loads
window
.fetch("/create-payment-intent", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({items: [{ qty: qty1 }, {qty: qty2}, {qty: qty3}] })
})
.then(res => {
return res.json();
})
.then(data => {
setClientSecret(data.clientSecret);
});
}, [qty1, qty2, qty3]);
Есть ли что-то еще, что мне нужно предоставить, чтобы получить помощь в решении этой проблемы?
-----> Build succeeded! =====> Downloading Buildpack: https://github.com/mars/create-react-app-inner-buildpack.git =====> Detected Framework: React.js (create-react-app) Writing
static.json` для поддержки приложения create-react-app Включение переменных среды выполнения =====› Загрузка пакета сборки: github.com/heroku/heroku-buildpack-static.git =====› Обнаруженный фреймворк: статический HTML ` - person Bryan Rhee   schedule 27.06.2020