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.
很明显我的服务器运行正常,但是
正如错误消息所示,通配符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)
| 归档时间: |
|
| 查看次数: |
5852 次 |
| 最近记录: |