如何发出错误可能在客户端的错误处理程序中捕获?

Eri*_*rik 3 javascript node.js express socket.io socket.io-1.0

我需要在连接处理程序中发出错误,并在客户端捕获此类错误:

//服务器端.js

var http = require('http');
var sio = require('socket.io');
var app = require('express')();

var server = require('http').createServer(app).listen(3000, function () {
    console.log('Server listening on 3000 port');
});

var io = sio.listen(server);

io.on('connection', function (socket) {
    // do something and emit error
    socket.emit('error', new Error('Some error happend'));
});
Run Code Online (Sandbox Code Playgroud)

//清洁侧

var socket = io.connect(window.location.origin);
socket.on('error', fucntion () {
   console.log('never happend');
});
Run Code Online (Sandbox Code Playgroud)

但是问题出socket.emit('error', new Error('Some error happend'));在服务器端,由于此问题,总是会引发错误并使Node.js服务器崩溃

您能帮助如何发出错误并在客户端正确处理吗?

kay*_*nce 5

服务器

socket.emit('my error', 'Some error happened');
Run Code Online (Sandbox Code Playgroud)

客户

socket.on('my error', function (text) {
   console.log(text);
});
Run Code Online (Sandbox Code Playgroud)

error 不幸的是,它是保留名称。

如果需要在客户端捕获它,请使用其他事件名称来通知客户端

// server
socket.on("error", function() {
    socket.emit("my error", "Something bad happened!");
});

// client
socket.on('my error', function (text) {
   console.log(text);
});    
Run Code Online (Sandbox Code Playgroud)

  • 不应发出以下事件:error、connect、disconnect、disconnecting、newListener、removeListener、ping、pong。它们列在本文档页面的底部 https://socket.io/docs/emit-cheatsheet/ (3认同)
  • @GennadiyRyabkin 他们已经重组了他们的文档部分。URL 现在取决于您使用的版本。我在之前的评论中指出的页面是版本 2 的,现在在这里 [socket.io/docs/v2/emit-cheatsheet](https://socket.io/docs/v2/emit-cheatsheet/) 有版本 3 和版本 4 的另外两个备忘单。 [socket.io/docs/v3/emit-cheatsheet](https://socket.io/docs/v3/emit-cheatsheet/) [socket.io/docs/v4/发射备忘单](https://socket.io/docs/v4/emit-cheatsheet/) (2认同)