CORS节点js问题

经过了多个post,我仍然找不到正确的答案。

检查了CORS扩展的文档。

我有以下服务器代码启动并运行:

var WebSocketServer = require("ws").Server var http = require("http") var express = require('express') var cors = require('cors') var app = express(); app.use(cors()); var port = process.env.PORT || 9000 var server = http.createServer(app) server.listen(port) var count = 0; var clients = {}; var rooms = {}; var wss = new WebSocketServer({server: server}) wss.on("connection", function(ws) { ws.on("create-room", function(data) { rooms[data] = {creator : data.user_id, created : new Date()} }) ws.on("close", function() { console.log("websocket connection close") }) }) 

但是我得到:

XMLHttpRequest无法加载http:// localhost:9000 / socket.io /?EIO = 3&transport = polling&t = LE-CbU0 。 当凭证标志为真时,通配符“*”不能在“Access-Control-Allow-Origin”头中使用。 原因' http:// localhost:8100 '因此不被允许访问。 XMLHttpRequest的凭证模式由withCredentials属性控制。

如果我用app.use(cors());注释行app.use(cors());

我得到:

XMLHttpRequest无法加载http:// localhost:9000 / socket.io /?EIO = 3&transport = polling&t = LE-Cwb8 。 请求的资源上没有“Access-Control-Allow-Origin”标题。 原因' http:// localhost:8100 '因此不被允许访问。 该响应具有HTTP状态码404。

所以很清楚,我的服务器运行正常,但

如错误消息所示,通配符Access-Control-Allow-Origin来源不能与Access-Control-Allow-Credentials 。 默认情况下, cors模块使用一个自发的来源,默认情况下,socket.io需要证书(或者看起来在这里)。 你需要做的是读取请求的Origin头部,并将其包含在响应的Access-Control-Allow-Origin中。

幸运的是, cors使这非常容易:为了反映请求的起源,传入一个选项对象与一个origin: true属性。 您还需要一个credentials: true属性来允许凭据:

 app.use(cors({ origin: true, credentials: true }));