Node.js で btoa, atob 関数を使えるようにしよう

phi phi on Node.js

Browser だと標準でグローバルに atob(), btoa() という関数が定義してあります.
それぞれ文字列をbase64に, base64を文字列に変換してくれる便利なメソッドです.

ですが, この関数は Node.js にはありません.

代わりに toString() が便利になっていて, encoding を指定できるようになっています.

自分は Browser 側の JavaScript に慣れ親しんでいる人なので, 今回はこの toString() を 使って Node.js 上で btoa, atob 相当の関数をそれぞれ定義する方法を紹介します.

btoa

base64 の方はバッファの場合があるので, 型チェックを挟んでいます.

追記(23 Oct 15): 会長からのアドバイスにより Buffer インスタンスかどうかの判定を str instanceof Buffer から Buffer.isBuffer(str) に変更

function btoa(str) {  
  var buffer;
  if (Buffer.isBuffer(str)) {
    buffer = str;
  }
  else {
    buffer = new Buffer(str.toString(), 'binary');
  }

  return buffer.toString('base64');
};

atob

function atob(str) {  
  return new Buffer(str, 'base64').toString('binary');
}

Reference