Node.js 将socket.io(^3.0.0)与Strapi服务器集成(“3.2.5”)CORS错误

Node.js 将socket.io(^3.0.0)与Strapi服务器集成(“3.2.5”)CORS错误,node.js,reactjs,socket.io,cors,strapi,Node.js,Reactjs,Socket.io,Cors,Strapi,我正在尝试构建一个简单的聊天应用程序。我正在使用CreateReact应用程序作为前端,并尝试将socket.io与Strapi服务器集成。我的create react应用程序服务器在端口3000上运行,而我的Strapi本地服务器在端口1337上运行 我用这个命令安装了starpiwarn create strapi app chat app,并手动选择mongodb作为数据库 在React应用程序中收到此错误: 代码 在我的React组件上,我有以下内容: import io from '

我正在尝试构建一个简单的聊天应用程序。我正在使用CreateReact应用程序作为前端,并尝试将socket.io与Strapi服务器集成。我的create react应用程序服务器在端口3000上运行,而我的Strapi本地服务器在端口1337上运行

我用这个命令安装了starpi
warn create strapi app chat app
,并手动选择
mongodb
作为数据库

在React应用程序中收到此错误:

代码 在我的React组件上,我有以下内容:

import io from 'socket.io-client';
const socket = io('http://localhost:1337');

 const handleClick = () => {        
        const username = props.username;
        socket.emit("sendMessage", {
            chatMessage,
            username
        })
    }
在Strapi后端的
/config/functions/bootstrap.js

module.exports = async () => {
    process.nextTick(() => {
        var io = require('socket.io')(strapi.server);

        strapi.io.on('connection', async function(socket) {

            socket.on('sendMessage', (msg) => {
                console.log("msg is", msg)
            })
            socket.on('disconnect', () =>{
                console.log('a user disconnected')
            });
        });
         strapi.io = io;
      })
};
我知道如何使用cors模块解决节点应用程序中的
cors
错误,并像
app一样使用它。使用(cors())
,但不确定在strapi的情况下如何解决此问题


我遵循并尝试了一些变通办法,但似乎没有一个奏效。如何解决此问题?

因此,我通过向socket.io提供cors对象来解决此问题。在最新版本的socket.io(3.0.0)中,选项
origins
已替换为
cors

有关详细信息,请查阅套接字迁移指南:


我现在可以在后端接收消息了。谢谢你,雅莉亚

所以我通过向socket.io提供cors对象解决了这个问题。在最新版本的socket.io(3.0.0)中,选项
origins
已替换为
cors

有关详细信息,请查阅套接字迁移指南:


我现在可以在后端接收消息了。谢谢你,雅莉亚

你能添加后端代码吗?我正在使用的strapi后端代码已经在上面的问题中了。您需要任何特定的代码吗?您是否尝试过使用cors模块
app.use(cors());app.use(function(req,res,next){res.header(“访问控制允许源代码“,”*”);res.header(“访问控制允许凭据”,true);res.header(“访问控制允许方法”,“获取,放置,发布,删除,选项”);res.header(“访问控制允许头代码”,“源代码,X请求-使用,内容类型,接受,内容类型,应用程序/json”);res.header(“缓存控制”,“无存储,无缓存,必须重新验证,代理重新验证,最大年龄=0”);next();})我知道nodejs中的cors问题,知道如何在Node中解决它。我不知道如何在Strapi CMS中实现同样的效果。我试过
require('socket.io')(strapi.server,{origins:'*'})
但这也不起作用。你试过这个或var http=
require('http').server(app);const io=require('socket.io')(http,{origins:'*:'*:'})并且您正在使用socket 3.0.0。许多东西都已更改。我此版本检查此更改日志。您可以添加后端代码吗?我正在使用的strapi后端代码已在上面的问题中列出。您需要任何特定的代码吗?您是否尝试过使用cors模块
app.use(cors());app.use(function(req,res,next){res.header(“访问控制允许源代码“,”*”);res.header(“访问控制允许凭据”,true);res.header(“访问控制允许方法”,“获取,放置,发布,删除,选项”);res.header(“访问控制允许头代码”,“源代码,X请求-使用,内容类型,接受,内容类型,应用程序/json”);res.header(“缓存控制”,“无存储,无缓存,必须重新验证,代理重新验证,最大年龄=0”);next();})我知道nodejs中的cors问题,知道如何在Node中解决它。我不知道如何在Strapi CMS中实现同样的效果。我试过
require('socket.io')(strapi.server,{origins:'*'})
但这也不起作用。你试过这个或var http=
require('http').server(app);const io=require('socket.io')(http,{origins:'*:'*:'})并且您使用的是socket 3.0.0。许多内容都已更改。我在此版本中检查此更改日志
    var io = require('socket.io')(strapi.server, {
            cors: {
              origin: "http://localhost:3000",
              methods: ["GET", "POST"],
              allowedHeaders: ["my-custom-header"],
              credentials: true
            }
   });