Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8835

Firestore: Reference型をJSONにするときの挙動を変える

$
0
0

前置き

例えば以下のようなデータをFunctionsでFirestoreのドキュメントusers/12345に入れたとする.

{"display_name":String,..."userDetail":Reference}

Functionsでこのデータを取ってきてJSONでクライアントに返すAPIを作る(error()とかsuccess()は別で作ってあるって言う体で...).

app.get("/users/:id",async(req,res,next)=>{constusers=awaitdb.doc(`accounts/${req.params.id}`).get();if(!users.exists){error(res,404,"users_created","You've not created first user.");return;}success(res,users.data());return;});

するとこんな感じのデータが返ってくる

{"display_name":"Bony_Chops",...."userDetail":{"_firestore":{"_settings":{"projectId":"nicha-nnct","firebaseVersion":"9.5.0","libName":"gccl","libVersion":"4.9.4 fire/9.5.0","ssl":false,....}....}...}}

Reference型がめっちゃでかい上ヤバそうな値を返してくる.これはまずい.

失敗例

Reference型の正体であるfirebase.firestore.DocumentReferenceクラスのtoJSONprototypeで上書きします(何故か補完でfirebase.default.firestore.DocumentReferenceだったのでそちらで...).とりあえず,そのReferenceが指すpathを返却するようにしてみます.

constfirebase=require("firebase");firebase.default.firestore.DocumentReference.prototype.toJSON=function(){returnthis.path;}

でもさっきの結果は変わりませんでした.なんで???

結論

Firestoreへのアクセスをdb = admin.firestore();で行っていたのでadmin.firestore.DocumentReferenceを使うのが適切だったみたいです.

constadmin=require('firebase-admin');admin.firestore.DocumentReference.prototype.toJSON=function(){returnthis.path;}

結果

{"display_name":"Bony_Chops",..."userDetail":"users_detail/12345"}

これでいい感じ.


Viewing all articles
Browse latest Browse all 8835

Trending Articles