436 Stimmen

Node.js wirft den Fehler "btoa ist nicht definiert" aus

In meiner node.js-Anwendung habe ich ein npm install btoa-atob durchgeführt, damit ich die Funktionen btoa() und atob() verwenden konnte, die in clientseitigem Javascript nativ sind, aber aus irgendeinem Grund nicht in Node enthalten waren. Das neue Verzeichnis erschien in meinem node_modules-Ordner, der sich im Stammverzeichnis neben app.js befindet. Dann habe ich dafür gesorgt, dass btoa-atob als Abhängigkeit in meiner package.json-Datei hinzugefügt wird, die sich im Stammverzeichnis befindet.

Dennoch funktioniert es aus irgendeinem Grund immer noch nicht.

console.log(btoa("Hallo Welt!"));

^ sollte "SGVsbG8gV29ybGQh" in der Konsole ausgeben, aber stattdessen erhalte ich den Fehler:

btoa ist nicht definiert.

Habe ich die Installation nicht richtig durchgeführt? Was habe ich übersehen?

3voto

lojza Punkte 1793

Wenn Sie hier sind und nach einer Lösung für atob ist nicht definiert suchen (wie ich). Versuchen Sie, Ihre Node.js-Version zu aktualisieren - das hat mir geholfen

1voto

Phil Gibbins Punkte 462

Ich verstehe, dass dies ein Diskussionspunkt für eine Node-Anwendung ist, aber im Interesse von universellen JavaScript-Anwendungen, die auf einem Node-Server laufen, bin ich auf diesen Beitrag gestoßen. Ich habe dies für eine universelle/isomorphe React-App, die ich erstelle, recherchiert, und das Paket abab hat für mich funktioniert. Tatsächlich war es die einzige Lösung, die ich finden konnte, die funktionierte, anstelle der Methode mit dem Buffer, die ebenfalls erwähnt wurde (ich hatte Typisierungsprobleme).

(Dieses Paket wird von jsdom verwendet, das wiederum vom Paket window verwendet wird.)

Kommen wir zu meinem Punkt zurück; basierend darauf, vielleicht, wenn diese Funktionalität bereits als npm-Paket wie das von Ihnen erwähnte vorhanden ist und über einen eigenen Algorithmus basierend auf dem W3-Standard verfügt, könnten Sie das Paket abab installieren und verwenden, anstatt Ihre eigene Funktion zu schreiben, die möglicherweise nicht korrekt basierend auf der Kodierung ist.

---BEARBEITEN---

Ich hatte heute merkwürdige Probleme mit der Codierung (ich weiß nicht, warum es jetzt angefangen hat) mit dem Paket abab. Es scheint die meiste Zeit korrekt zu codieren, aber manchmal codiert es auf der Benutzeroberfläche falsch. Ich habe viel Zeit damit verbracht, zu debuggen, aber bin auf das Paket base-64 umgestiegen, wie es empfohlen wurde, und es hat sofort funktioniert. Es schien definitiv an dem base64-Algorithmus von abab zu liegen.

0voto

designcise Punkte 3404

Anders als in Webbrowsern (wo btoa() eine globale Funktion ist), ist die btoa()-Funktion in Node.js-Versionen unter 16 nicht im globalen Namensraum verfügbar. Aus diesem Grund wirft sie in Node.js-Versionen vor 16, wenn versucht wird, auf die btoa()-Funktion im globalen Namensraum zuzugreifen, einen "btoa ist nicht definiert"-Fehler.

Unabhängig davon wird btoa() jedoch in der Node.js-Dokumentation als "legacy" markiert und es wird nicht empfohlen, sie zur Base64-Codierung eines Strings zu verwenden, da sie Zeichen jenseits des ASCII/Latin-1-Zeichensatzes nicht verarbeiten kann. Wie in anderen Antworten erwähnt, sollten Sie stattdessen Buffer.from() verwenden, zum Beispiel so:

Buffer.from('Hallo Welt!').toString('base64');

Ich habe die folgenden Blog-Beiträge zu diesem Thema verfasst, die für diejenigen hilfreich sein könnten, die mehr erfahren möchten:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X