首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用require(“CORS”)但仍然得到CORS错误

使用require(“CORS”)但仍然得到CORS错误
EN

Stack Overflow用户
提问于 2021-07-11 20:38:18
回答 2查看 449关注 0票数 2

我正在尝试构建一个简单的React/Node/Socket.io应用程序。

这是React app.js

代码语言:javascript
复制
import React, { useState, useEffect } from "react";
import socketIOClient from "socket.io-client";
const ENDPOINT = "http://127.0.0.1:4001";

function App() {
  const [response, setResponse] = useState("");

  useEffect(() => {
    const socket = socketIOClient(ENDPOINT);
    socket.on("FromAPI", data => {
      setResponse(data);
    });
  }, []);

  return (
    <p>
      It's <time dateTime={response}>{response}</time>
    </p>
  );
}

export default App;

这是Node app.js

代码语言:javascript
复制
const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const cors = require('cors');

const port = process.env.PORT || 4001;
const index = require("./routes/index");

const app = express();
//app.use(cors());
app.use(cors({
    origin: ['http://localhost:3000'],
    credentials: true
}));
app.use(index);

const server = http.createServer(app);
const io = socketIo(server);

let interval;

io.on("connection", (socket) => {
  console.log("New client connected");
  if (interval) {
    clearInterval(interval);
  }
  interval = setInterval(() => getApiAndEmit(socket), 1000);
  socket.on("disconnect", () => {
    console.log("Client disconnected");
    clearInterval(interval);
  });
});

const getApiAndEmit = socket => {
  const response = new Date();
  // Emitting a new message. Will be consumed by the client
  socket.emit("FromAPI", response);
};

server.listen(port, () => console.log(`Listening on port ${port}`));

当我加载localhost:3000并检查JavaScript控制台时,会得到以下错误:

代码语言:javascript
复制
GET http://127.0.0.1:4001/socket.io/?EIO=4&transport=polling&t=NgNHj7X net::ERR_FAILED
Access to XMLHttpRequest at 'http://127.0.0.1:4001/socket.io/?EIO=4&transport=polling&t=NgNHkML' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

require('cors')app.use(cors())不应该解决这个问题吗?我都试过了

代码语言:javascript
复制
app.use(cors())

代码语言:javascript
复制
app.use(cors({
        origin: ['http://localhost:3000'],
        credentials: true
    }));

却得到了同样的结果。

编辑:根据Socket.io文档这里,我尝试了以下操作:

代码语言:javascript
复制
const socketIo = require("socket.io",{
    cors: {
      origin: "http://localhost:3000",
      methods: ["GET", "POST"]
    }
  });

但这也造成了同样的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-13 23:22:05

将CORS参数传递到socketIO构造函数解决了这个问题,如下所示:

代码语言:javascript
复制
const io = socketIo(server,{
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST"],
    credentials:true
  }
});
票数 1
EN

Stack Overflow用户

发布于 2021-07-12 01:05:54

重复检查您的allowedHeaders并允许使用methods,工作示例:

代码语言:javascript
复制
const corsOptions = {
    allowedHeaders: ['X-ACCESS_TOKEN', 'Access-Control-Allow-Origin', 'Authorization', 'Origin', 'x-requested-with', 'Content-Type', 'Content-Range', 'Content-Disposition', 'Content-Description'],
    credentials: true,
    methods: 'GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE',
    origin: ['http://macog.local:5001','http://localhost:5001', 'https://app.foo.com', 'http://10.0.2.2:5001'],
    preflightContinue: false
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68339787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档