在我的node.js应用程序中,我做了一个npm安装btoa-atob,这样我就可以使用btoa()和atob()函数,这些函数在客户端javascript中是原生的,但由于某种原因没有包含在node中。新目录出现在我的node_modules文件夹中,它本身和app.js一起在根目录下。然后我确保在包中添加btoa-atob作为依赖项。Json文件,在根目录下。

然而,由于某种原因,它仍然不能工作。

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

^应该输出“SGVsbG8gV29ybGQh”到控制台,但是相反,我得到了错误:

Btoa没有定义。

我没有正确地安装吗?我忽略了什么?


当前回答

如果你在这里结束,寻找atob不是定义的解决方案(像我一样)。试着升级你的nodejs版本-这对我有帮助

其他回答

下面是一个简洁的base64编码通用解决方案:

const nodeBtoa = (b) => Buffer.from(b).toString('base64');
export const base64encode = typeof btoa !== 'undefined' ? btoa : nodeBtoa;

如果你在这里结束,寻找atob不是定义的解决方案(像我一样)。试着升级你的nodejs版本-这对我有帮助

'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。

我的团队在与React Native和PouchDB一起使用Node时遇到了这个问题。下面是我们的解决方法……

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');
  };
}

我有一个服务器和客户端之间共享的代码,我需要一个btoa的实现在它里面。 我试着这样做:

const btoaImplementation =  btoa || (str => Buffer.from(str).toString('base64'));

但服务器会崩溃:

ReferenceError: btoa没有定义

而Buffer没有在客户端上定义。

我不能检查窗户。Btoa(这是一个共享代码,记得吗?)

所以我最终得到了这个实现:

const btoaImplementation = str => {
    try {
        return btoa(str);
    } catch(err) {
        return Buffer.from(str).toString('base64')
    }
};