Ember-cli-Mirage 重定向 socket.io 客户端,该客户端注入 Mirage 中

ember-cli-mirage redirects socket.io client, which is injected in mirage

本文关键字:客户端 注入 Mirage socket io Ember-cli-Mirage 重定向      更新时间:2023-09-26

这里发生的问题是,当我通过节点在示例 socekt.io 客户端与此 socket.io 服务器连接时.js(只是运行两个终端并在客户端和服务器之间打开套接字连接)我没有问题。

但是,当我尝试将此 socket.io 客户端注入我的 Ember.js 应用程序中时,正是为了 ember-cli-mirage,它将我的客户端从给定地址重定向到:('http://localhost

:8080') 到 http://
localhost:8080/socket.io/?EIO=3&传输=轮询&.....
Mirage 还向我展示了一个我无法处理的错误,即使通过设置精确的命名空间、路由 wsClient.connect() 方法或调用 this.passthrough() ,在调用 wsClient.connect() 之前也是如此。


我还粘贴了浏览器中检查控制台的错误屏幕截图:

错误图像


您知道如何解决此问题吗?提前感谢您,我也希望该主题不重复。

// server.js
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
app.listen(8080);
function handler(req, res) {
  res.writeHead(200);
  res.end('default.index');
}
var rooms = {
  'room1': [
  ],
  'room2': [
  ]
};
io.on('connection', function(socket) {
  console.log('client connected');

  socket.on('join', function(roomName) {
    rooms[roomName].push(socket.id);
    socket.join(roomName);
  });
  socket.on('leave', function(roomName) {
    var toRemove = rooms[roomName].indexOf(socket.id);
    rooms[roomName].splice(toRemove, 1);
    socket.leave('roomName');
  });

  socket.on('eNotification', function(data) {
    console.log(data);
    io.to(socket.id).emit('eNotificationCall', data);
    io.to('room2').emit('eventNotification', data);
  });

  socket.on('gNotification', function(data) {
    console.log(data);
    io.to(socket.id).emit('gNotificationCall', data);
    io.to('room1').emit('diagram1Notification', data);
  });

  socket.on('close', function() {
    console.log('client disconnected');
  });
});

//client.js
var wsClient = {
  socket: null,
  connect: function() {
    this.socket = io.connect('http://localhost:8080');
    this.socket.on('connect', function() {
      console.log('mirage client connected!');
    });
  },
  send: function(eventData, graphData) {
    this.socket.emit('eNotification', eventData);
    this.socket.emit('gNotification', graphData);
  }
};
export default wsClient;

//config.js
import wsClient from './websockets/client';
export default function() {
wsClient.connect();
console.log(wsClient.socket);
var graphData = {X: "2", Y: "3"};
var eventData = {myDAta: 'myDAta', message: 'message'};
setInterval(function() {
    wsClient.send(graphData, eventData);
}, 5000);
}

如果您调用没有参数的this.passthrough(),则仅允许当前域上的请求直通。看起来 websocket 连接在不同的端口上,因此请尝试直接指定它:

this.passthrough('http://localhost:8080/**');

有关详细信息,请参阅文档。