node.js - 如何在所有文件的 express.js 4.x 上启用 CORS?

标签 node.js express

我一直收到

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/

相关文章:

node.js - NodeJS 和 Socket.IO 用户认证

javascript - 即使提供了 Pingdom 凭据也会丢失

node.js - 使用 postgres 从 heroku 中提取数据

javascript - 如何使用 Node js 从 firebase 数据库以 JSON 格式检索所需的 JSON 对象

javascript - 如何在 Node.js 中获取 async.each 的结果

javascript - 使用 KnockoutJS 和 Jade 加载 json 文件

node.js - Nodejs Express router.get ('/' ) 在 users.js 中

javascript - 如何在node js客户端缓存.js文件

node.js - 使用express.js 和twitter 获取node.js 中的最后3 条推文。终端显示我的应用程序已通过身份验证但返回 null

node.js - csrf token 使用