Estoy tratando de ejecutar un sitio web en una instancia de AWS EC2 usando React, Express y Axios.
El problema: no puedo realizar llamadas axios al back-end de Express que se ejecuta en la misma instancia. El código funciona bien en mi máquina local, pero en la instancia de EC2 aparece Error: Network Error . El servidor se ejecuta en el puerto 5000 y el cliente se ejecuta en el puerto 3000. Puedo acceder al sitio web desde el exterior usando la URL y puedo realizar solicitudes GET al back-end directamente usando Postman.
Home.js (interfaz)
import { useState, useEffect } from 'react'; import axios from 'axios'; function Home() { const [text, setText] = useState(''); useEffect(() => { axios.get(`http://172.31.20.10:5000/`) .then( result => { setText(result.data); }, err => { alert(err); setText('An error has occurred'); } ); }); return ( <h1>{ text }</h1> ); } export default Home;App.js (interfaz)
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import Home from './Home'; import reportWebVitals from './reportWebVitals'; ReactDOM.render( <React.StrictMode> <Home /> </React.StrictMode>, document.getElementById('root') ); reportWebVitals();App.js (programa de fondo)
const express = require('express'); const cors = require('cors'); const app = express() const port = 5000; app.use(express.json()); app.use(cors()); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`App listening on http://localhost:${port}`); }); 172.31.20.10 es la IP privada de la instancia EC2. Intenté usar localhost en lugar de IP, https:// en lugar de http:// , no usar http(s) en absoluto, dejando completamente fuera http e IP/localhost, etc. Ninguno ha funcionado hasta ahora. Cualquier ayuda sería muy apreciada.
Para responder a los comentarios: el código funcionó en mi propia computadora, y todo el error de red fue un error de CORS ("La solicitud de CORS no se realizó" o algo así).
Todavía no estoy seguro de qué salió mal, pero lo "resolví" alojando el cliente y el servidor en dos instancias diferentes. No estoy seguro de cómo o por qué funciona, pero lo hizo...