You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fastify集成fastify-socket.io时配置CORS仍出现跨域错误如何解决

问题原因&解决方案

1. fastify-cors注册语法错误

当前代码注册fastify-cors时提前闭合了register方法的括号,配置对象完全没有传入插件,fastify层面的CORS规则没有生效:

// 错误写法
server.register(fastifyCors),
  {
    origin: "*",
    methods: "GET,POST,PUT,PATCH,DELETE",
  };

修正写法,将配置对象作为第二个参数传入register方法:

server.register(fastifyCors, {
  origin: "*",
  methods: ["GET", "POST", "PUT", "PATCH", "DELETE"],
});

2. socket.io未单独配置CORS

fastify-cors的规则仅作用于fastify普通HTTP路由,socket.io的握手请求是独立处理的,不会继承fastify-cors的配置,需要在注册fastify-socket.io时单独传入CORS规则:

// 错误写法
server.register(fastifyIO);

修正写法:

server.register(fastifyIO, {
  cors: {
    origin: "*",
    methods: ["GET", "POST"]
  }
});

完整修正后的后端代码

import fastify from "fastify";
import fastifyIO from "fastify-socket.io";
import fastifyCors from "fastify-cors";

const server = fastify();
const PORT = 5000;

server.register(fastifyCors, {
  origin: "*",
  methods: ["GET", "POST", "PUT", "PATCH", "DELETE"],
});

server.register(fastifyIO, {
  cors: {
    origin: "*",
    methods: ["GET", "POST"]
  }
});

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);
    });
  });
});

server.listen(PORT, () => {
  console.log(`Server running on port:${PORT}`);
});

可选前端优化

如果仍有跨域问题,可在前端连接时添加传输协议优先级配置,优先走websocket避免轮询阶段的跨域检测:

const socket = io("http://localhost:5000", {
  transports: ['websocket', 'polling']
});

内容的提问来源于stack exchange,提问作者Eric Pezzulo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:15:08