我正在尝试在客户端和服务器端套接字之间建立连接,但是无法在控制台中解决该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 }
高度赞赏所有帮助。