我无法弄清楚如何防止在 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&transport=polling&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 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android Persistence room:“无法弄清楚如何从光标读取此字段”