Estoy tratando de configurar fastify-socket.io, fastify-cors, pero sigo recibiendo errores CORS.
Tengo fastify-cors y fastsity-socket.io registrados
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/socket.io/?EIO=4&transport=polling&t=NoUUJ6g. (Reason: CORS header 'Access-Control-Allow-Origin' missing).Aquí está el código de back-end:
import fastify from "fastify"; import fastifyIO from "fastify-socket.io"; import fastifyCors from "fastify-cors"; const server = fastify();'' const PORT = 5000; server.register(fastifyIO); server.register(fastifyCors), { origin: "*", methods: "GET,POST,PUT,PATCH,DELETE", }; server.listen(PORT, () => { console.log(`Server running on port:${PORT}`); }); server.get("/", (request, reply) => { reply.status(200).send({ ServerOnline: true }); }); server.ready().then(() => { server.io.on("connection", (socket) => { console.log("user connected" + socket.id); socket.on("message", (data) => { console.log(data); }); }); });Aquí está el código frontal:
import "./App.css"; import { io } from "socket.io-client"; function App() { const sendData = () => { const socket = io("http://localhost:5000"); socket.on("connection"); const sendMessage = () => { socket.emit("message", "hey it worked!"); }; sendMessage(); }; return ( <div className="app-container"> <h1>Socket.IO</h1> <button onClick={sendData}>Send</button> </div> ); } export default App; No estoy seguro de por qué recibo estos Cors Errors. Creo que tiene algo que ver con fastify-socket.io
Encontré la solución, no parece que registrar fastifyCors antes de fastifyIO haga una diferencia, pero lo cambié de todos modos. No estaba configurando fastifyIO correctamente.
server.register(fastifyCors, { origin: "*", methods: ["GET", "POST", "PUT", "PATCH", "DELETE"], }); server.register(fastifyIO, { cors: { origin: "http://localhost:3000", methods: ["GET", "POST", "PUT", "PATCH", "DELETE"], }, });Con andamio Fastify cli
fastify.register(require('./plugins/cors.js')) fastify.register(require('./plugins/socketio.js'), { // put your options here }) fastify.register(AutoLoad, { dir: path.join(__dirname, 'plugins'), options: Object.assign({}, opts), ignorePattern: /.*(socketio|cors).js/ })