Socket.io发射事件仅适用于发射器

时间:2019-06-05 18:14:41

标签: javascript node.js validation socket.io

我有使用socket.io发送图像的算法,因此我决定添加“正在加载”消息,直到图像加载完毕。

  $("#output").append(
        `<div id="loading-placeholder" style="opacity: 0"><div id="loading">${loadingSvg}</div></div>`
      );

并且在加载图像时删除了该div

但是问题是我在服务器端进行了图像验证

var ext = image.substring("data:image/".length, image.indexOf(";base64"));
console.log('extension ' + ext)
if(ext === 'jpeg' || ext === 'png' || ext === 'jpg'){
  chnm.in(socket.current_room).emit('img', {image: data.image, id: socket.id});
}
else{
  return false  
}

,如果图像扩展名不是jpeg ||,则返回false。 png || jpg,在这种情况下,它会返回false,并且永远不会加载图片,因此加载的svg会永远保留。因此,如果服务器端验证失败,我想向用户返回其图像发送失败的响应。我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用控制消息。添加is_loaded属性。

chnm.in(socket.current_room).emit('img', {
  image: data.image,
  id: socket.id,
  is_loaded: true
});

万一发生故障:

chnm.in(socket.current_room).emit('img', {
  image: null,
  id: null,
  is_loaded: false
});

另一种可能的解决方案:

  • 只需检查图像是否为空。
  • 在客户端添加超时。