在我的node.js应用程序中,我做了一个npm install btoa-atob
,这样我就可以使用btoa()
和atob()
函数,这两个函数在客户端javascript中是原生的,但是由于某种原因,node中没有包含它们。新目录出现在我的node_modules
文件夹中,该文件夹本身与app.js
一起位于根目录中。然后,我确保将btoa- to作为依赖项添加到根目录下的package.json
文件中。
然而,由于某些原因,它仍然不会工作。
console.log(btoa("Hello World!"));
^应该将"SGVsbG8gV29ybGQh“输出到控制台,但我得到的却是错误:
未定义
btoa。
我没有正确安装吗?我忽略了什么?
发布于 2014-04-16 10:31:44
'btoa-atob‘模块不会导出编程接口,它只提供命令行实用程序。
如果需要转换为Base64,可以使用Buffer:
console.log(Buffer.from('Hello World!').toString('base64'));
反转(假设您解码的内容是一个utf8字符串):
console.log(Buffer.from(b64Encoded, 'base64').toString());
注意:在Node v4之前,请使用new Buffer
而不是Buffer.from
。
发布于 2017-12-19 23:38:31
这里发布的解决方案不支持非ascii字符(例如,如果您计划在Node.js和浏览器之间交换base64 )。为了使它工作,您必须将输入文本标记为“二进制”。
Buffer.from('Hélló wórld!!', 'binary').toString('base64')
这将为您提供SOlsbPMgd/NybGQhIQ==
。如果你在浏览器中制作atob('SOlsbPMgd/NybGQhIQ==')
,它会以正确的方式解码它。它也可以通过以下方式在Node.js中正确运行:
Buffer.from('SOlsbPMgd/NybGQhIQ==', 'base64').toString('binary')
如果你不做“二进制部分”,你将错误地解码特殊字符。
发布于 2016-07-19 06:31:32
我的团队在将Node与React Native和PouchDB一起使用时遇到了这个问题。这就是我们如何解决它的.
NPM安装缓冲区:
$ npm install --save buffer
确保Buffer
、btoa
和atob
作为全局变量加载:
global.Buffer = global.Buffer || require('buffer').Buffer;
if (typeof btoa === 'undefined') {
global.btoa = function (str) {
return new Buffer(str, 'binary').toString('base64');
};
}
if (typeof atob === 'undefined') {
global.atob = function (b64Encoded) {
return new Buffer(b64Encoded, 'base64').toString('binary');
};
}
https://stackoverflow.com/questions/23097928
复制相似问题