如何解决Node.js 中“btoa未定义”错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1202)

在我的node.js应用程序中,我做了一个npm install btoa-atob以便我可以使用客户端JavaScript中原生的btoa()和atob()函数,但由于某些原因未包含在节点中。新目录显示在我的node_modules文件夹中,该文件夹本身位于app.js的根目录中。然后,我确保将btoa-atob作为依赖项添加到我的package.json文件中,该文件位于根目录中。

但是,由于某种原因,它仍然无法正常工作。

console.log(btoa("Hello World!"));

^应该输出“SGVsbG8gV29ybGQh”到控制台,但是我得到错误“btoa不是defiend”。

我没有正确安装吗?

提问于
用户回答回答于

'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

用户回答回答于

使用Node with React Native和PouchDB时,我的团队遇到了这个问题。

NPM安装缓冲区:

$ npm install --save buffer

确保Bufferbtoaatob作为全局变量加载:

global.Buffer = global.Buffer || require('buffer').Buffer;

if (typeof btoa === 'undefined') {
  global.btoa = function (str) {
    return new Buffer(str).toString('base64');
  };
}

if (typeof atob === 'undefined') {
  global.atob = function (b64Encoded) {
    return new Buffer(b64Encoded, 'base64').toString();
  };
}

扫码关注云+社区

领取腾讯云代金券