CORS节点js问题

ka_*_*lin 7 node.js cors socket.io angularjs

在堆栈上经历了多个帖子后,我仍然找不到合适的答案.

检查了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")
    })
})
Run Code Online (Sandbox Code Playgroud)

但我得到:

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

如果我评论该行 app.use(cors());

我明白了:

XMLHttpRequest无法加载 http:// localhost:9000/socket.io /?EIO = 3&transport = polling&t = LE-Cwb8.请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:8100 "因此不允许访问.响应具有HTTP状态代码404.

很明显我的服务器运行正常,但是

aps*_*ers 9

正如错误消息所示,通配符Access-Control-Allow-Origin源不能与之一起使用Access-Control-Allow-Credentials.默认情况下,cors模块使用一个wildbound源,默认情况下socket.io需要凭据(或者它似乎在这里,无论如何).您需要做的是阅读Origin请求的标题并将其包含在Access-Control-Allow-Origin响应中.

幸运的是,cors这很容易:为了反映请求的来源,传入一个带有origin: true属性的options对象.您还需要一个credentials: true允许凭据的属性:

app.use(cors({
    origin: true,
    credentials: true
}));
Run Code Online (Sandbox Code Playgroud)