From 35cfe200626849f463e9ed791b27b7a889931ddf Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 13:39:12 +0200 Subject: [PATCH 1/5] =?UTF-8?q?If-Abfrage=20f=C3=BCr=20ObjectId-Filterung?= =?UTF-8?q?=20eingebaut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 74 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/index.js b/index.js index 828c284..e78006f 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ -import { WebSocketServer } from 'ws'; -import { MongoClient } from 'mongodb'; +import { WebSocketServer } from "ws"; +import { MongoClient, ObjectId } from "mongodb"; const mongo = new MongoClient(process.env.MONGO_CONN_STR); const db = mongo.db(); @@ -14,56 +14,72 @@ async function executeSet(message, ws) { if (!subject) { subject = collections[message.subject] = db.collection(message.subject); } - let newValue = {$set: {}}; - newValue.$set[message.field + '.modifiedAt'] = Date.now(); - newValue.$set[message.field + '.modifiedBy'] = 'anonymous'; - newValue.$set[message.field + '.transientValue'] = message.value; + let newValue = { $set: {} }; + newValue.$set[message.field + ".modifiedAt"] = Date.now(); + newValue.$set[message.field + ".modifiedBy"] = "anonymous"; + newValue.$set[message.field + ".transientValue"] = message.value; - await subject.updateMany(message.filter, newValue, { upsert: true }) + await subject.updateMany(message.filter, newValue, { upsert: true }); } -wss.on('connection', function connection(ws) { +wss.on("connection", function connection(ws) { connections.push(ws); - console.log('accepted new connection'); + console.log("accepted new connection"); - ws.on('error', console.error); - ws.on('close', e => { - console.log('closed a connection'); + ws.on("error", console.error); + ws.on("close", (e) => { + console.log("closed a connection"); connections.splice(connections.indexOf(ws), 1); }); - ws.on('message', function message(data, isBinary) { - console.log('received a new message'); + ws.on("message", function message(data, isBinary) { + console.log("received a new message"); + if ( + message.filter && + message.filter._id && + typeof message.filter._id === "string" + ) { + try { + message.filter._id = new ObjectId(message.filter._id); + } catch (e) { + console.error("Invalid ObjectId in filter:", e); + } + } try { let message = JSON.parse(data); - console.log('message action is ' + message.action); + console.log("message action is " + message.action); switch (message.action) { - case 'set': + case "set": executeSet(message, ws).catch(console.error); break; - case 'subscribe': + case "subscribe": let subject = collections[message.subject]; if (!subject) { - subject = collections[message.subject] = db.collection(message.subject); + subject = collections[message.subject] = db.collection( + message.subject + ); } - subject.find(message.filter, {}).toArray().then(r => { - ws.send(JSON.stringify({ - subject: message.subject, - field: message.field, - filter: message.filter, - value: r.map(v => v[message.field]) - })); - }); + subject + .find(message.filter, {}) + .toArray() + .then((r) => { + ws.send( + JSON.stringify({ + subject: message.subject, + field: message.field, + filter: message.filter, + value: r.map((v) => v[message.field]), + }) + ); + }); break; } - } catch (e) { - console.error('error while processing message', e); + console.error("error while processing message", e); ws.send(JSON.stringify(e)); } }); - }); From 36e5acb7e9c263c21249ef576d3c062c05c6bfcd Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 14:39:59 +0200 Subject: [PATCH 2/5] Add ConsoleLog --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index e78006f..f82a24a 100644 --- a/index.js +++ b/index.js @@ -41,6 +41,7 @@ wss.on("connection", function connection(ws) { ) { try { message.filter._id = new ObjectId(message.filter._id); + console.log(message.filter._id); } catch (e) { console.error("Invalid ObjectId in filter:", e); } From af8547b3d6f9b61fbcd625b65cc8c1e0918fd0bf Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 14:46:30 +0200 Subject: [PATCH 3/5] Nochmal --- index.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/index.js b/index.js index f82a24a..3f96027 100644 --- a/index.js +++ b/index.js @@ -34,21 +34,21 @@ wss.on("connection", function connection(ws) { ws.on("message", function message(data, isBinary) { console.log("received a new message"); - if ( - message.filter && - message.filter._id && - typeof message.filter._id === "string" - ) { - try { - message.filter._id = new ObjectId(message.filter._id); - console.log(message.filter._id); - } catch (e) { - console.error("Invalid ObjectId in filter:", e); - } - } try { let message = JSON.parse(data); + if ( + message.filter && + message.filter._id && + typeof message.filter._id === "string" + ) { + try { + message.filter._id = new ObjectId(message.filter._id); + console.log(message.filter._id); + } catch (e) { + console.error("Invalid ObjectId in filter:", e); + } + } console.log("message action is " + message.action); switch (message.action) { From 44938c472ce198dc649023da4f812fbb70a7784b Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 14:50:11 +0200 Subject: [PATCH 4/5] .. --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index 3f96027..f7938c5 100644 --- a/index.js +++ b/index.js @@ -37,6 +37,7 @@ wss.on("connection", function connection(ws) { try { let message = JSON.parse(data); + console.log(message); if ( message.filter && message.filter._id && From 4667563094e18d62e7db5cba5d19b082de78fdcb Mon Sep 17 00:00:00 2001 From: Timo Reichl Date: Sun, 30 Mar 2025 14:53:08 +0200 Subject: [PATCH 5/5] TEST --- index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/index.js b/index.js index f7938c5..f92d6e4 100644 --- a/index.js +++ b/index.js @@ -34,6 +34,7 @@ wss.on("connection", function connection(ws) { ws.on("message", function message(data, isBinary) { console.log("received a new message"); + console.log("test"); try { let message = JSON.parse(data);