From 2862c2fef1064940c1deb9c4aa961cb76c279feb Mon Sep 17 00:00:00 2001 From: Luigi Pinca Date: Mon, 23 Jan 2023 21:32:38 +0100 Subject: [PATCH] [doc] Add error handlers to examples and code snippets Closes #2112 --- README.md | 36 +++++++++++++++++++++++++ examples/express-session-parse/index.js | 10 +++++++ examples/server-stats/index.js | 2 ++ examples/ssl.js | 4 +++ 4 files changed, 52 insertions(+) diff --git a/README.md b/README.md index 4539df294..a550ca1c7 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,8 @@ import WebSocket from 'ws'; const ws = new WebSocket('ws://www.host.com/path'); +ws.on('error', console.error); + ws.on('open', function open() { ws.send('something'); }); @@ -171,6 +173,8 @@ import WebSocket from 'ws'; const ws = new WebSocket('ws://www.host.com/path'); +ws.on('error', console.error); + ws.on('open', function open() { const array = new Float32Array(5); @@ -190,6 +194,8 @@ import { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws) { + ws.on('error', console.error); + ws.on('message', function message(data) { console.log('received: %s', data); }); @@ -212,6 +218,8 @@ const server = createServer({ const wss = new WebSocketServer({ server }); wss.on('connection', function connection(ws) { + ws.on('error', console.error); + ws.on('message', function message(data) { console.log('received: %s', data); }); @@ -234,10 +242,14 @@ const wss1 = new WebSocketServer({ noServer: true }); const wss2 = new WebSocketServer({ noServer: true }); wss1.on('connection', function connection(ws) { + ws.on('error', console.error); + // ... }); wss2.on('connection', function connection(ws) { + ws.on('error', console.error); + // ... }); @@ -266,16 +278,24 @@ server.listen(8080); import { createServer } from 'http'; import { WebSocketServer } from 'ws'; +function onSocketError(err) { + console.error(err); +} + const server = createServer(); const wss = new WebSocketServer({ noServer: true }); wss.on('connection', function connection(ws, request, client) { + ws.on('error', console.error); + ws.on('message', function message(data) { console.log(`Received message ${data} from user ${client}`); }); }); server.on('upgrade', function upgrade(request, socket, head) { + socket.on('error', onSocketError); + // This function is not defined on purpose. Implement it with your own logic. authenticate(request, function next(err, client) { if (err || !client) { @@ -284,6 +304,8 @@ server.on('upgrade', function upgrade(request, socket, head) { return; } + socket.removeListener('error', onSocketError); + wss.handleUpgrade(request, socket, head, function done(ws) { wss.emit('connection', ws, request, client); }); @@ -306,6 +328,8 @@ import WebSocket, { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws) { + ws.on('error', console.error); + ws.on('message', function message(data, isBinary) { wss.clients.forEach(function each(client) { if (client.readyState === WebSocket.OPEN) { @@ -325,6 +349,8 @@ import WebSocket, { WebSocketServer } from 'ws'; const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws) { + ws.on('error', console.error); + ws.on('message', function message(data, isBinary) { wss.clients.forEach(function each(client) { if (client !== ws && client.readyState === WebSocket.OPEN) { @@ -342,6 +368,8 @@ import WebSocket from 'ws'; const ws = new WebSocket('wss://websocket-echo.com/'); +ws.on('error', console.error); + ws.on('open', function open() { console.log('connected'); ws.send(Date.now()); @@ -369,6 +397,8 @@ const ws = new WebSocket('wss://websocket-echo.com/'); const duplex = createWebSocketStream(ws, { encoding: 'utf8' }); +duplex.on('error', console.error); + duplex.pipe(process.stdout); process.stdin.pipe(duplex); ``` @@ -393,6 +423,8 @@ const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws, req) { const ip = req.socket.remoteAddress; + + ws.on('error', console.error); }); ``` @@ -402,6 +434,8 @@ the `X-Forwarded-For` header. ```js wss.on('connection', function connection(ws, req) { const ip = req.headers['x-forwarded-for'].split(',')[0].trim(); + + ws.on('error', console.error); }); ``` @@ -425,6 +459,7 @@ const wss = new WebSocketServer({ port: 8080 }); wss.on('connection', function connection(ws) { ws.isAlive = true; + ws.on('error', console.error); ws.on('pong', heartbeat); }); @@ -466,6 +501,7 @@ function heartbeat() { const client = new WebSocket('wss://websocket-echo.com/'); +client.on('error', console.error); client.on('open', heartbeat); client.on('ping', heartbeat); client.on('close', function clear() { diff --git a/examples/express-session-parse/index.js b/examples/express-session-parse/index.js index b62a2e4a5..e0f214406 100644 --- a/examples/express-session-parse/index.js +++ b/examples/express-session-parse/index.js @@ -7,6 +7,10 @@ const uuid = require('uuid'); const { WebSocketServer } = require('../..'); +function onSocketError(err) { + console.error(err); +} + const app = express(); const map = new Map(); @@ -59,6 +63,8 @@ const server = http.createServer(app); const wss = new WebSocketServer({ clientTracking: false, noServer: true }); server.on('upgrade', function (request, socket, head) { + socket.on('error', onSocketError); + console.log('Parsing session from request...'); sessionParser(request, {}, () => { @@ -70,6 +76,8 @@ server.on('upgrade', function (request, socket, head) { console.log('Session is parsed!'); + socket.removeListener('error', onSocketError); + wss.handleUpgrade(request, socket, head, function (ws) { wss.emit('connection', ws, request); }); @@ -81,6 +89,8 @@ wss.on('connection', function (ws, request) { map.set(userId, ws); + ws.on('error', console.error); + ws.on('message', function (message) { // // Here we can now use session parameters. diff --git a/examples/server-stats/index.js b/examples/server-stats/index.js index e8754b5b2..afab8363f 100644 --- a/examples/server-stats/index.js +++ b/examples/server-stats/index.js @@ -22,6 +22,8 @@ wss.on('connection', function (ws) { }, 100); console.log('started client interval'); + ws.on('error', console.error); + ws.on('close', function () { console.log('stopping client interval'); clearInterval(id); diff --git a/examples/ssl.js b/examples/ssl.js index a5e750b79..83fb5f280 100644 --- a/examples/ssl.js +++ b/examples/ssl.js @@ -13,6 +13,8 @@ const server = https.createServer({ const wss = new WebSocketServer({ server }); wss.on('connection', function connection(ws) { + ws.on('error', console.error); + ws.on('message', function message(msg) { console.log(msg.toString()); }); @@ -31,6 +33,8 @@ server.listen(function listening() { rejectUnauthorized: false }); + ws.on('error', console.error); + ws.on('open', function open() { ws.send('All glory to WebSockets!'); });