NestJS base64 decode,

NestJS base64 decode,
2021-08-10T14:22:45+02:00
2021-08-12T09:43:59+02:00
2022-10-15T21:16:23+02:00
Kóré Levente
Sziasztok!

Adott egy debezium stream, ami egy adatbázis tábla változását figyeli, majd lepublikálja azt egy NestJs microservice-nek.

Abba a problémába ütköztem, hogy a number típusu mezőket a debezium base64 encode-olja. 

Például egy ilyen encode-olt érték: "AIdZ" - ami egy adatbázis táblában lévő bejegyzés ID-ja.

Ezt a következő képpen kellene számmá alakítanom: base64 > binaris > számrendszer megadása

AIdZ > 000000001000011101011001 > 34649

Az alábbi kódrészlettel próbáltam elvégezni az átalakítást:

Buffer.from('AIdZ', 'base64').readBigInt64BE();
Ezenkivül próbáltam még az alábbiakat is,
• .readBigInt64BE()
• .readBigInt64LE()
• .readBigUInt64BE()
• .readBigUInt64LE()

de ez eredmény mindig egy hibaüzenet:  RangeError [ERR_BUFFER_OUT_OF_BOUNDS]: Attempt to access memory outside buffer bounds.

Kivéve egy esetben

Buffer.from(value, 'base64').readUInt8();
Ebben az esetben nem jön hibaüzenet,  viszont ez csak a 0-255 tartományig működőképes.



Utánaolvastam már mindenhol, de nem jövök rá, hogy mi lehet a probléma.
Mutasd a teljes hozzászólást!
Hosszabb adatmennyiséget akarsz beolvasni a bufferből, mint amennyi benne van. Nem egészen értem, miért kell egyáltalán bufferbe tenni és visszaolvasni, egy base64 szting nem más, mint egy szám (sima hagyományos integer) 64-es számrendszerben ábrázolva. Egyszerűen tudsz a 64-esből 10-esbe váltani egy for ciklussal.

const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; const value = 'AIdZ'; let result = 0; for (const letter of value) { result *= 64; result += alphabet.indexOf(letter); } console.log(result);

>> 34649
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd