En mi aplicación node.js hice una npm install btoa-atob
para poder usar las funciones btoa () y atob () que son nativas en javascript del lado del cliente pero por alguna razón no se incluyeron en el nodo. El nuevo directorio apareció en mi carpeta node_modules, que está en la raíz junto con app.js. Luego me aseguré de agregar btoa-atob como una dependencia en mi archivo package.json que está en la raíz.
Sin embargo, por alguna razón, todavía no funcionará.
console.log(btoa("Hello World!"));
^ debería mostrar "SGVsbG8gV29ybGQh" en la consola, pero en su lugar, aparece el error "btoa no está definido".
¿No hice la instalación correctamente? ¿Qué pasé por alto?
Buffer.from('Hélló wórld!!').toString('base64')
, le daráSOlsbPMgd/NybGQhIQ==
qué se puede convertir a una cadena no ASCII correctamente.SMOpbGzDsyB3w7NybGQhIQ==
. Si decodifica esto en un navegador, le daráHélló wórld!!
. El binario es perfecto para garantizar la compatibilidad multiplataforma.Mi equipo se encontró con este problema al usar Node con React Native y PouchDB. Así es como lo resolvimos ...
NPM buffer de instalación:
Asegúrese
Buffer
,btoa
yatob
se cargan como globales:fuente
Descubrí que, aunque las cuñas de las respuestas anteriores funcionaron, no coincidían con el comportamiento de las implementaciones de los navegadores de escritorio de
btoa()
yatob()
:Como resultado, las
Buffer
instancias representan / interpretan cadenas codificadas en UTF-8 de forma predeterminada . Por el contrario, en Chrome de escritorio, ni siquiera puede ingresar una cadena que contenga caracteres fuera del rango latin1btoa()
, ya que arrojará una excepción:Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
Por lo tanto, es necesario establecer de forma explícita el tipo de codificación para
latin1
el fin para sus Node.js calce para que coincida con el tipo de codificación de escritorio Chrome:fuente
Buffer.from()
es la forma recomendada de usar la API de búfer por razones de seguridad (aunque ese enlace aclarará alternativas a lasBuffer.from()
que pueden aplicarse para el Nodo v0.12.2).Tengo un código compartido entre el servidor y el cliente y necesitaba una implementación de btoa dentro de él. Intenté hacer algo como:
pero el servidor se enamoraría de:
while
Buffer
no está definido en el cliente.No pude comprobar window.btoa (es un código compartido, ¿recuerdas?)
Así que terminé con esta implementación:
fuente
Entiendo que este es un punto de discusión para una aplicación de nodo, pero en interés de las aplicaciones universales de JavaScript que se ejecutan en un servidor de nodo, que es cómo llegué a esta publicación, he estado investigando esto para una aplicación de reacción universal / isomórfica. edificio, y el paquete
abab
funcionó para mí. De hecho, fue la única solución que pude encontrar que funcionó, en lugar de usar el método Buffer también mencionado (tuve problemas con el mecanografiado).(Este paquete es usado por
jsdom
, que a su vez es usado por elwindow
paquete)Volviendo a mi punto; basado en esto, quizás si esta funcionalidad ya está escrita como un paquete npm como el que mencionó, y tiene su propio algoritmo basado en la especificación W3, podría instalar y usar el
abab
paquete en lugar de escribir su propia función que puede o no ser precisa basada en la codificación.--- EDITAR ---
Comencé a tener problemas extraños hoy con la codificación (no estoy seguro de por qué comenzó a suceder ahora) con el paquete
abab
. Parece que codifica correctamente la mayor parte del tiempo, pero a veces en el front end codifica incorrectamente. Pasé mucho tiempo tratando de depurar, pero cambié al paquetebase-64
según lo recomendado, y funcionó de inmediato. Definitivamente parecía estar en el algoritmo base64 deabab
.fuente
El mismo problema con el complemento 'script' en el editor Atom, que es una versión antigua del nodo, que no tiene btoa (), ni atob (), ni es compatible con el tipo de datos Buffer. El siguiente código hace el truco:
fuente
Tal vez ya no lo necesite, pero si alguien lo necesita usando el nodo: https://www.npmjs.com/package/btoa
fuente
fuente
Aquí hay una solución universal concisa para la codificación base64:
fuente