Heroku在尝试通过socket.io + express获取实时数据时给了我“跨域请求被阻止”

时间:2019-04-03 15:49:29

标签: express heroku socket.io cors

我正在尝试在客户端和服务器端套接字之间建立连接,但是无法在控制台中解决该CORS错误。我已经在本地测试了我的应用程序,但是在将其部署到Heroku之后,出现了此错误。

浏览器控制台: https://imgur.com/v2VEkTy

我尝试在导入socket.io时添加{origins:'*:*'}。我还尝试通过npm的cors模块跳过这些错误,但是没有结果。

这是我构造监听在服务器端表示的socketIO的方式:

const express = require('express');
const server = require('https').createServer(express);
const io = require('socket.io')(server, {origins:'*:*'});

在这里,我将尝试捕获已添加到数据库中的新数据。我可以将数据打印到Heroku控制台,但是登录后无法将其推送到客户端:

  var db = admin.database();
  var ref = db.ref("light");

  //Logging to Heroku console
  ref.on("child_added", function(snapshot) {
    console.error(snapshot.val());
  });

  io.on('connection', function (socket) {
    socket.on('subscribeToData', function () {
      console.error('Client is subscribing with intervall ');

        ref.on("child_added", function(snapshot) {
          console.error(snapshot.val());
          socket.emit('firebase-data', snapshot.val());

        }, function(errorObject){
          console.error("The read failed: " + errorObject.code);
        });
    });
  });

部署后的Heroku控制台: https://i.imgur.com/5KCVeEg.png

这是客户端API,用于处理数据订阅(我也假设要建立连接吗?)它将在App构造函数中初始化。

import io from 'socket.io-client';


function subscribeToData(cb) {
  //var socket = io.connect(`https://express-b.herokuapp.com:80`);
  var socket = io.connect(`wss://express-b.herokuapp.com:80/socket.io/?EIO=3&transport=websocket`);
  socket.on('firebase-data', data => cb(null, data));
  socket.emit('subscribeToData');

};


export { subscribeToData }

高度赞赏所有帮助。

0 个答案:

没有答案