FC2ブログ
 
■プロフィール

クリエイトウェーブスタッフ

Author:クリエイトウェーブスタッフ
開発における、諸々を書いていきたいなと思っています。

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ
■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
cloud functionsでFireStore上の複数のドキュメントを読みこむ
あるコレクションに、ドキュメンとが複数あってscoreってフィールドに得点が、userIDってフィールド
にユーザーIDが並んでるとします。
仮にスコア100点の人をクエリで抽出して、抽出した該当userID使って、他の基本情報が書き込んである
コレクションからuserIDを使って、複数人のデータを抽出したい場合どうするんだと、ここ数日悩んで
おりました。
それこそ、10人だったり、100人だったりの可能性もある訳で・・・・

const ref = admin.fireStore.collection('コレクション名');
ref.where("score", "=", 100).get()
.then(querySnapshot => {
   for(let i= 0; i < querySnapshot.docs.length; i++)
   {
      const userId = querySnapshot.docs[i].data().userId;
      // ここでそれぞれDB読み込み?
   }
})
.catch(error => {
   console.log("DBの読み込みに失敗しました");
});

ってな感じで、async/await 使ったほうが良さそうとか思い デフォのV6エンジンだと使えないとかで
cloud functions上では、未だベータのNodeJSをV8エンジンにしてみたり
思考錯誤の連続・・・ 
でも、こういう場合の複数読み込みの命令はforeStoreに準備されてるようです。

その命令とは、
admin.fireStore.getAll

まず、クエリで、スコア100点の該当者を

ってな感じで書いておいて次の処理。
階層深くなると読みにくいので、私の場合、const me = this; で実行してるオブジェクトを参照させて
次のメソッドを呼び出してます。

jsは、こうでもしないとthisのスコープが、変化しまくるのでメソッドが特定出来ないので・・・・
me って変数は、DirectorのLingoで使ってた名残でなんとかく・・(懐かしい

次の処理は

という感じになります。

admin.fireStore.getAll が何故かマニュアルにも見当たらないし、英語音痴な私が海外のサイトとか
見てようやくここまでたどり着きました・・・数日かかった。

「...refArray」の「...」ってなに? と思ったらSpread構文というものらしい。知らなかった


カテゴリー:FireBase | TM(0) | CM(0)
setAutoPaddingの書き方が変わっていた
前にCloud FunctionとUnityで暗号通信やろうとして
Node.jsとUnityで暗号通信
を載せたのですが、そのとき引っかかったのがパディングの設定。
パディングの設定をしなければ、うまくいかなかったのですが、今回仕事で実装しようとしたら・・・あれれれれ

自分はCloud Function(NodeJS)をプログラムするときは、IDEはintellijを使ってるのですが
decipher.setAutoPadding(auto_padding =false);
auto_paddingの部分が赤文字になってるぞ。。。。。   まさかintellijのような超優秀なIDEがミスするわけないし。。。 と思ってたらやっぱり駄目だった・・・

decipher.setAutoPadding(false);
と書くのが正解になったようです・・・
まあ仕様が変わる事はよくあるし、今回の書き方のほうがしっくりくるけど・・・
まあ宿命ですね・・ ちょっとだけ苦戦しました。


カテゴリー:FireBase | TM(0) | CM(0)
FireBaseのCloudFunctionsからβマークがなくなっている
cf.jpg

FireBaseのドキュメントのとこみたら、CloudFunctionからβマークがなくなってるじゃありませんか!!
ついに正式版になったのですかね。
調べたんですが、ちょっとよくわからない。

でもFireBaseは、積極的に使っていくのでCloudFunctnからβが取れたのは嬉しい限りです。
Node.JSも大分慣れましたしね!!

カテゴリー:FireBase | TM(0) | CM(0)
CloudFunctionでGETを受信
ものすごく、しょうもない事で時間を使ってしまったので備忘録

FireBaseのfunctionsでGETってどうやってうけとるんだっけ? と思ったのだけどそれがわかんなくて・・・
functions.https.onRequest((request, response) => { の命令のあとに request.method でGETかPOSTを分岐させてるページはあるんですが、実際のパラメータ取得のサンプルはPOSTばかり・・・・

結局、よくわからなくてnode.js(functionsは結局node.jsですもんね)のGETサンプルのページみつけて解決しました。
node.jsのもなかなかわかりやすいサンプルみつからず・・・・

https://~~~~~~~~~~~~~~~~~~~~~~~~~~~/gettest?user=akito
でuserにakitoって文字入れてるんですがfunctionsは無事以下のようにしたらとれました。

exports.gettest = functions.https.onRequest((request, response) => {
response.send(request.query['user']);
});

こんなのに時間かけてしまって・・・
しかも使う事あるのだろうか・・・


カテゴリー:FireBase | TM(0) | CM(0)
CloudFunctions上でサーバー時間を取得
node.jsで時間取得の命令を使えばいいのだろうと思ったのですが 「date-utils」 を使うらしい。
functionsのnode_modulesの中を見てみると、 「date-utils」がないように見える。。。

cd functions のコマンドでfunctionsのフォルダの中に入り
npm install date-utils
を実行しました。

node_modulesの中に 「date-utils」 が出来てました。
index.jsの中で

require('date-utils');
var date = new Date();
var formatted = date.toFormat("YYYY/MM/DD HH24時MI分SS秒");
response.send(formatted);

を書いてデプロイして実行してみた。
ちゃんと取れたんですが、年月日はあってるんだけど、時間、分、秒がどうみても日本時間ではない・・・・

調べてみたところ、協定世界時というので表示されている。
日本時間との差は、丁度9時間きっかりのようです。

require('date-utils');
var date = new Date();
date.setHours(date.getHours()+9);//日本時間に変換
var formatted = date.toFormat("YYYY/MM/DD HH24時MI分SS秒");
response.send(formatted);

でちゃんと日本時間で表示されるのが確認出来ました。

var formatted = date.toFormat("YYYYMMDDHH24MISS");
とすれば、数字のみで
20180514101010 (2018年5月14日10字0分10秒)みたいな値で取得できます。

Functionsで、期間限定でイベントを行うAPIを作る時に役に立ちそうです。

カテゴリー:FireBase | TM(0) | CM(2)
次のページ

FC2Ad