#node.js #reactjs #express #stripe-payments
#node.js #reactjs #экспресс #stripe-платежи
Вопрос:
У меня есть существующее приложение для интернет-магазина, созданное с помощью React на интерфейсе, и я пытаюсь интегрировать STRIPE в качестве способа оплаты, используя NODE Express на серверной части. Я хотел бы запустить их на том же порту, и я попробовал с прокси в package.json и, обслуживая index.html как статический файл, но он не работает.
Я обслуживаю index.html как статический файл, но, похоже, он не читает ничего, кроме html. Вот мой код:
server.js
const express = require('express');
require('dotenv').config('.env');
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const path = require('path')
import Products from './src/components/Products';
import CartItem from './src/components/context/cartProvider';
const app = express();
// I am trying to serve the whole React app as static file
app.use(express.static('public'));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'))
})
// ENDPOINTS FOR SESSION HERE
app.post("/create-checkout-session", async (req, res) => {
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
line_items: [
// Here we have to send clonedCart[] as body
],
mode: "payment",
success_url: "https://example.com/success",
cancel_url: "https://example.com/cancel",
});
res.json({ id: session.id });
});
app.listen(4000, () => console.log('Server is running on port 4000'))
В package.json я добавил следующую строку:
"proxy": "http://localhost:4000",
Стоит отметить, что React выполняется на порту по умолчанию: 3000
Комментарии:
1. Вам вроде бы не нужен прокси здесь. Из ваших комментариев я предполагаю, что на ваш пакет React нет ссылок в index.html файл, который вы размещаете. Одностраничное приложение React в основном сводится к index.html файл, содержащий пакет JavaScript вашего приложения, который обычно готовится с помощью Webpack. Я бы рекомендовал взглянуть на вас index.html файл и обеспечение того, чтобы он включал ваш пакет приложений. Способ, которым вы обслуживаете статический файл, также кажется немного странным. Обычно вам просто нужна строка типа:
app.use('/', express.static(path.join(__dirname, 'public', 'index.html')));
.
Ответ №1:
Обслуживание статического html из node.js серверный код, не будет работать. Поскольку вы используете только html общей папки, его нельзя использовать. Чтобы использовать его, вам нужно использовать версию сборки.
Что я могу понять из вашего вопроса, так это то, что вам нужно запускать их на одном порту, потому что вы можете получать ошибку cors. Поэтому используйте модуль cors.