No sé por qué, pero me confundí con respecto al comportamiento único de Nodejs.
El siguiente es mi código nodejs, my server is running at port:8080
const express = require("express"); const app = express(); const multer = require("multer"); const cors = require('cors'); app.use(cors({ origin:"http://localhost:4000" })) app.get("/userinfo", async (req, res) => { console.log("reached heree"); res.json({ message: "access", }); }); app.listen( 8080, (error) => { if (error) { console.log("error"); } }, () => { console.log("listening at port 8080"); } );Y estoy tratando de acceder a la API desde un origen diferente [localhost:3000]
import logo from './logo.svg'; import './App.css'; import axios from "axios"; function App() { const makeRequest =()=>{ axios.get("http://localhost:8080/userinfo").then(response=>{ console.log(response); }).catch((e)=>{ console.log(e); }) } return ( <div className="App"> <button onClick={makeRequest}>Click</button> </div> ); } export default App; Pero cuando hago clic en Hacer Click cuando inspecciono el código, recibo un mensaje de error como You are blocked by CORS policy Pero cuando veo en la terminal en mi lado del servidor, veo el resultado Reached here . En este punto, me sentí demasiado confundido y frustrado al mismo tiempo. ¿Cómo la solicitud entre sitios activó /userinfo desde el origen diferente? No creo que esto deba suceder. Como puedo solucionar este problema??
No es su servidor el que está bloqueando la solicitud. Su servidor DEBERÍA devolver la solicitud HTTP porque los servidores y WIFI y su enrutador no se preocupan por CORS.
Es el navegador web el que bloquea el CORS. Bloquear CORS no significa que no llegue al punto final del servidor. Ni siquiera significa que el paquete HTTP esté bloqueado. El bloqueo de CORS significa que su navegador web se niega a permitir que su código javascript lea los datos devueltos por el servidor .
El propósito de CORS es eludir la política original del mismo origen que todavía se aplica en la actualidad. La política del mismo origen se agregó cuando se agregó javascript a los navegadores web. Permite que los navegadores web realicen solicitudes HTTP, pero intenta evitar que los scripts malintencionados escuchen los datos HTTP al impedir que los scripts lean el resultado de las solicitudes HTTP ( XMLHttpRequest o fetch ) a menos que la URL sea del mismo dominio que la página.
Lo único que agrega CORS es un encabezado que su servidor puede enviar de regreso al navegador que le dice al navegador que está bien que el código javascript acceda al resultado de la solicitud HTTP.