From a2b9e5d7773f0e7b51c84a0bc342c5b1eca80081 Mon Sep 17 00:00:00 2001 From: Ludovic Le Frioux <ludovic.le-frioux@inria.fr> Date: Thu, 17 Dec 2020 14:47:55 +0100 Subject: [PATCH] Check CRDT form at first update, catch deserialization exception --- src/service.ts | 49 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/service.ts b/src/service.ts index e8dd542..388af3a 100644 --- a/src/service.ts +++ b/src/service.ts @@ -230,33 +230,32 @@ function updateObject(dbName: string, docName: string, document: string) { .use(dbName) .get(docName) .then((body) => { - const CRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson(document); - const bodyCRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson( - JSON.stringify(body) - ); - bodyCRDT.merge(CRDT); - const newDocument = JSON.parse(bodyCRDT.toJson()); - newDocument._rev = body._rev; - client.db - .use(dbName) - .insert(newDocument, docName) - .catch((error) => { - console.error( - `[SERVER][ERROR] Failed updating document '${docName}' in database '${dbName}'` - ); - console.error(error); - }); + try { + const CRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson(document); + const bodyCRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson( + JSON.stringify(body) + ); + bodyCRDT.merge(CRDT); + const newDocument = JSON.parse(bodyCRDT.toJson()); + newDocument._rev = body._rev; + client.db.use(dbName).insert(newDocument, docName); + } catch (error) { + console.error( + `[SERVER][ERROR] Failed updating document '${docName}' in database '${dbName}'` + ); + console.error(error); + } }) .catch((error) => { - client.db - .use(dbName) - .insert(JSON.parse(document), docName) - .catch((error) => { - console.error( - `[SERVER][ERROR] Failed updating document '${docName}' in database '${dbName}'` - ); - console.error(error); - }); + try { + const CRDT = crdtlib.crdt.DeltaCRDT.Companion.fromJson(document); + client.db.use(dbName).insert(JSON.parse(document), docName); + } catch (error) { + console.error( + `[SERVER][ERROR] Failed updating document '${docName}' in database '${dbName}'` + ); + console.error(error); + } }); }) .catch((error) => { -- GitLab