使用NodeJS / Express和HTTPS时socket.io中的CORS错误

时间:2019-06-27 18:46:04

标签: node.js socket.io

我正在使用以下代码,以便能够从应用程序的不同部分访问socket.io。一切在开发服务器上都能正常工作,但是一旦我在HTTPS服务器上尝试在生产环境中使用它,它就会失败,并显示以下错误。

  

从原点“ https://nodejs.demo.net/socket.io/?EIO=3&transport=polling&t=MkQBnlU”到“ http://127.0.0.1:9999”的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:“访问控制”的值当请求的凭据模式为“包括”时,响应中的“允许-起源”标头不得为通配符“ *”。 XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制

在我的app.js文件中,我以此启动它

const express = require('express');
const app = express();
const https = require('https');
const io = require('sio').init(https);

var options = {
  key: fs.readFileSync('./cert/nodejs.demo.net.key'),
  cert: fs.readFileSync('./cert/ServerCertificate.cer')
};

https.createServer(options, app).listen(443,()=>{
  console.log("listening secure via SSL on 443")
})

这是sio文件的内容

const socketio = require('socket.io');
let io;

module.exports = {
   init: function(server) {
        if (io) {
            throw new Error("socket.io already initialized");
        }
        // initalize socket.io to this server
        io = socketio(server);

        // put other socket.io initialization code here

        return io;
   }
   get: function() {
        if (!io) {
             throw new Error("socket.io has not yet been initialized");
        }
        return io;
   }
}

那我在哪里以及如何解决该cor的错误?

1 个答案:

答案 0 :(得分:0)

您的服务器应允许CORS请求,请尝试CORS module

// Enable All CORS Requests
const cors = require('cors')

app.use(cors())

使用您的代码:

const express = require('express');
const app = express();
const https = require('https');
const io = require('sio').init(https);
const cors = require('cors');

app.use(cors());

var options = {
  key: fs.readFileSync('./cert/nodejs.demo.net.key'),
  cert: fs.readFileSync('./cert/ServerCertificate.cer')
};

https.createServer(options, app).listen(443,()=>{
  console.log("listening secure via SSL on 443")
})