我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]

Posted

技术标签:

【中文标题】我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]【英文标题】:I'm unable to figure out how to prevent getting this CORS error in Node.js [duplicate] 【发布时间】:2020-08-02 09:06:03 【问题描述】:

我正在尝试弄清楚如何创建一个实时聊天应用程序,该应用程序使用 Vue.js 作为前端,Node.js 作为后端,使用 socket.io。

我已经使用 express-generator 生成了我的后端 Node.js 项目,该项目可通过 http://localhost:3000 访问。在这个项目中,我有一个 app.js 文件,其中包含:

var express = require('express');
var http = require('http').createServer(express);
var io = require('socket.io')(http);

io.on('connection', (socket) => 
    console.log('a user connected');
);

我的前端是一个可从http://localhost:8080 访问的 Vue.js 项目,并且用于连接到我的后端的组件包含以下内容:

<template>
    <div class="home">

    </div>
</template>

<script>
import socket from 'socket.io-client'

export default 
    mounted()
        socket.connect('http://localhost:3000')
    


</script>

遗憾的是,套接字连接似乎没有通过。在前端控制台上,我收到这些错误 -

localhost/:1 Access to XMLHttpRequest at 'http://localhost:3000/socket.io/?EIO=3&transport=polling&t=N6Kc6yn' from origin 'http://localhost:8080' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

在后端控制台我收到此错误 - GET /socket.io/?EIO=3&amp;transport=polling&amp;t=N6KcMan 404 3.089 ms - 975

我尝试通过 npm install cors 安装 cors 并添加了所需的代码,但实际上什么也没发生。它看起来像这样:

var express = require('express');
var cors = require('cors');
var app = express();
app.use(cors());

var http = require('http').createServer(express);
var io = require('socket.io')(http);

io.on('connection', (socket) => 
    console.log('A user has connected!');
);

我不知道为什么会这样。

【问题讨论】:

我认为你打错了,发送express,你应该在命令var http = require('http').createServer(app);中发送你的app。因此,cors 中间件也将包含在您的服务器实例中。 我也尝试过,但没有改变任何事情。问题是我的代码行数太少,我就是看不出问题出在哪里。 嗯,这很奇怪!让我把项目挂载到我的机器上! 第一个问题。你为什么使用两台服务器? Socket.io 可以很好地共享您的 Web 服务器。 第二个问题,如果您要发送凭据,您是否按照错误中给出的建议进行操作,即您无法在服务器上的“Access-Control-Allow-Origin”中使用通配符? 有细微的措辞差异,您最后一个问题的非常清晰的复制粘贴:Getting a CORS error when trying to establish socket.io connection between back-end on localhost:3000 and front-end on localhost:8080 【参考方案1】:

尝试删除这个 -> app.use(cors());如果问题仍然存在,您可能会遇到错误的路径。

【讨论】:

知道了,所以,尝试添加这个 -> io.origins(':') 或这个 io.set('origins', ': i>');

以上是关于我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

收听Node.js ReadableStream

Node.js写入YAML文件

Android Persistence room:“无法弄清楚如何从光标读取此字段”

使用 mypy 进行类型检查,我无法弄清楚为啥会发生此错误 [关闭]

Node.js mysql 读取 ECONNRESET

Node.js反向代理背后的ArangoDB Web界面 - 无法连接