我一直收到
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://example.com:2013/socket.io/?EIO=3&transport=polling&t=1433950808025-0. (Reason: CORS request failed).
当我尝试访问我的 node.js 时。这对我不起作用:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
@edit:这是更新后的完整代码:
var express = require('express');
var http = require('http');
var expressvar = express();
expressvar.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Headers', 'accept, authorization, content-type, x-requested-with');
res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res.setHeader('Access-Control-Allow-Origin', req.header('origin'));
next();
});
expressvar.use(express.static('../'));
expressvar.use("/socket.io", express.static('../socket.io'));
var app = http.createServer(expressvar);
var io = require('socket.io').listen(app);
app.listen(2013);
最佳答案
试试这个解决方案(经过编辑以包含完整的工作代码)
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
io.set('origins', '*:*');
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', req.get('Origin') || '*');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res.header('Access-Control-Expose-Headers', 'Content-Length');
res.header('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, X-Requested-With, Range');
if (req.method === 'OPTIONS') {
return res.send(200);
} else {
return next();
}
});
server.listen(80);
app.get('/', function (req, res) {
res.send('OK');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
关于node.js - 如何在所有文件的 express.js 4.x 上启用 CORS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30761154/