概要
Firebase へのデータの保存と取得をサーバサイドからやってみました
今回は公式の nodejs のライブラリを使って操作してみました
環境
- Mac OS 10.12.1
- nodejs 5.9.1
- firebase-admin 4.0.2
認証情報の取得
Firebase にアクセスするための admin ユーザの認証情報を取得します
認証情報は各プロジェクトごとに割り当てられています
まず Firebase のコンソール画面から「権限」を選択します
すると Google の IAM 管理の画面に移動するので左メニューからサービスアカウントを選択します
一覧の中に「firebase-adminsdk」というユーザがいるので、一番右のメニューから「鍵を作成」を選択します
鍵のフォーマットを選択する画面になるので JSON を選択して鍵を生成します
すると認証情報が記載された json ファイルがダウンロードできます
この json ファイルを使って Firebase に認証します
ライブラリのインストール
では、nodejs を使ってプログラミングしていきます
まずは公式が公開しているライブラリをインストールします
npm install firebase-admin --save
で OK です
初期化
まずは Firebase にアクセスするために認証情報を使って初期化します
var admin = require("firebase-admin");
var serviceAccount = require("./your-project-admin.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://your-db-id.firebaseio.com/"
});
var database = admin.database();
ダウンロードした認証情報のファイルを require で読み込みます
あとは initializeApp 関数を呼び出してデータベースを初期化します
以降は database オブジェクトを操作することでデータの読み書きを行います
データの保存
先ほどの初期化した処理の下にデータを保存する処理を追記しましょう
teamA/users というパスの配下にユーザを追加するような処理になっています
var ref = database.ref("teamA");
var usersRef = ref.child("users");
usersRef.set({
hawk: {
age: 1,
sex: "male"
},
snow: {
age: 1,
sex: "famale"
}
});
実行して Firebase のコンソールでデータを確認すると以下のように表示されると思います
データの取得
続けて保存したデータを取得してみたいと思います
snapshot という単位で保存したデータを取得します
初期化のあとに以下を記載してください
var ref = database.ref("teamA");
ref.on("value", function(snapshot) {
console.log(snapshot.val());
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
データが取得できると実行したコンソール画面に以下のように表示されると思います
{ users:
{ hawk: { age: 1, sex: 'male' },
snow: { age: 1, sex: 'famale' } } }
ちなみに、node を実行している状態でコンソールからデータを追加するとそのデータもリアルタイムで node 側にデータが表示されると思います
{ users:
{ hawk: { age: 1, sex: 'male' },
log: { age: 2, sex: 'male' },
snow: { age: 1, sex: 'famale' } } }
最後に
nodejs から Firebase へのデータの保存と取得を行ってみました
データベースは Firebase だと「Realtime Database」という位置づけになるので、取得などの処理は少し癖のある感じになっています
Websocket や MQTT のように一度コネクションを張れば基本はそのコネクションを使いまわしてデータの取得をリアルタイムに行っている感じだと思います
一応クエリやフィルタの概念はあるので検索やソートできると思います
その辺りも後で検証してみたいなとは思っています
あとはサーバサイドからの更新や削除もやってみようかなと思います
0 件のコメント:
コメントを投稿