cok*_*n19 1 firebase google-cloud-functions google-cloud-firestore
QuerySnapshot我正在尝试从可调用的 Google Cloud 函数 返回 a 。
以下是详细信息,但我的核心问题是,我应该能够做到这一点还是这是一个错误?
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
import * as firestore from '@google-cloud/firestore';
export const callableTest = functions.https.onCall(
async (data: Map<string, any>, context: functions.https.CallableContext):
Promise<firestore.QuerySnapshot> => {
const db = admin.firestore();
return db.collection('test')
.get();
// I also tried this
//return db.collection('test').get().then(querySnapshot => {
// return querySnapshot;
//});
});
Run Code Online (Sandbox Code Playgroud)
该test集合可以包含任意数量的文档。在本例中,有两个文档。
这是我的客户端 HTML 页面,但我也在 Flutter 和 Node 中尝试过,得到了相同的结果。
<!DOCTYPE html>
<html>
<head>
<script src="https://www.gstatic.com/firebasejs/5.7.3/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "### API KEY ###",
authDomain: "<project-id>.firebaseapp.com",
databaseURL: "https://<project-id>.firebaseio.com",
projectId: "<project-id>",
storageBucket: "<project-id>.appspot.com",
messagingSenderId: "<sender-id>"
};
firebase.initializeApp(config);
var testClientCall = firebase.functions().httpsCallable('callableTest');
testClientCall ({}).then(function(result) {
// Read result of the Cloud Function.
console.log("Cloud Function result:");
console.log(result);
});
</script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是返回的结果,看起来像QuerySnapshot,但不包含任何DocumentSnapshots(_docs属性),即使该_size属性指示应该有两个文档。
{"data":{"_query":{"_firestore":{"_clientPool":{"concurrentOperationLimit":100,"clientFactory":{},"activeClients":{}},"_settings":{"projectId":"<project-id>","firebaseVersion":"6.4.0","libName":"gccl","libVersion":"0.19.0 fire/6.4.0"},"_settingsFrozen":false,"_clientInitialized":{"domain":{"domain":null,"_events":{"error":{}},"_eventsCount":1,"_maxListeners":null,"members":[]}},"_serializer":{"createReference":{},"timestampsInSnapshots":false},"_referencePath":{"segments":[],"projectId":"project-id","databaseId":"(default)"},"_lastSuccessfulRequest":1547738645649,"_validator":{"isFunction":{},"isOptionalFunction":{},"isInteger":{},"isOptionalInteger":{},"isNumber":{},"isOptionalNumber":{},"isObject":{},"isOptionalObject":{},"isString":{},"isOptionalString":{},"isBoolean":{},"isOptionalBoolean":{},"isArrayElement":{},"isOptionalArrayElement":{},"isDeletePrecondition":{},"isOptionalDeletePrecondition":{},"isDocument":{},"isOptionalDocument":{},"isDocumentReference":{},"isOptionalDocumentReference":{},"isFieldPath":{},"isOptionalFieldPath":{},"isFieldValue":{},"isOptionalFieldValue":{},"isFieldOrder":{},"isOptionalFieldOrder":{},"isQueryComparison":{},"isOptionalQueryComparison":{},"isQueryValue":{},"isOptionalQueryValue":{},"isResourcePath":{},"isOptionalResourcePath":{},"isSetOptions":{},"isOptionalSetOptions":{},"isReadOptions":{},"isOptionalReadOptions":{},"isUpdateMap":{},"isOptionalUpdateMap":{},"isUpdatePrecondition":{},"isOptionalUpdatePrecondition":{}},"_preferTransactions":true},"_path":{"segments":["test"],"projectId":"project-id","databaseId":"(default)"},"_fieldFilters":[],"_fieldOrders":[],"_queryOptions":{},"_validator":{"isFunction":{},"isOptionalFunction":{},"isInteger":{},"isOptionalInteger":{},"isNumber":{},"isOptionalNumber":{},"isObject":{},"isOptionalObject":{},"isString":{},"isOptionalString":{},"isBoolean":{},"isOptionalBoolean":{},"isArrayElement":{},"isOptionalArrayElement":{},"isDeletePrecondition":{},"isOptionalDeletePrecondition":{},"isDocument":{},"isOptionalDocument":{},"isDocumentReference":{},"isOptionalDocumentReference":{},"isFieldPath":{},"isOptionalFieldPath":{},"isFieldValue":{},"isOptionalFieldValue":{},"isFieldOrder":{},"isOptionalFieldOrder":{},"isQueryComparison":{},"isOptionalQueryComparison":{},"isQueryValue":{},"isOptionalQueryValue":{},"isResourcePath":{},"isOptionalResourcePath":{},"isSetOptions":{},"isOptionalSetOptions":{},"isReadOptions":{},"isOptionalReadOptions":{},"isUpdateMap":{},"isOptionalUpdateMap":{},"isUpdatePrecondition":{},"isOptionalUpdatePrecondition":{}},"_serializer":{"createReference":{},"timestampsInSnapshots":false}},"_readTime":{"_seconds":1547738645,"_nanoseconds":638303000},"_size":2,"_materializedDocs":null,"_materializedChanges":null,"_docs":{},"_changes":{},"_validator":{"isFunction":{},"isOptionalFunction":{},"isInteger":{},"isOptionalInteger":{},"isNumber":{},"isOptionalNumber":{},"isObject":{},"isOptionalObject":{},"isString":{},"isOptionalString":{},"isBoolean":{},"isOptionalBoolean":{},"isArrayElement":{},"isOptionalArrayElement":{},"isDeletePrecondition":{},"isOptionalDeletePrecondition":{},"isDocument":{},"isOptionalDocument":{},"isDocumentReference":{},"isOptionalDocumentReference":{},"isFieldPath":{},"isOptionalFieldPath":{},"isFieldValue":{},"isOptionalFieldValue":{},"isFieldOrder":{},"isOptionalFieldOrder":{},"isQueryComparison":{},"isOptionalQueryComparison":{},"isQueryValue":{},"isOptionalQueryValue":{},"isResourcePath":{},"isOptionalResourcePath":{},"isSetOptions":{},"isOptionalSetOptions":{},"isReadOptions":{},"isOptionalReadOptions":{},"isUpdateMap":{},"isOptionalUpdateMap":{},"isUpdatePrecondition":{},"isOptionalUpdatePrecondition":{}}}}
Run Code Online (Sandbox Code Playgroud)
起初我认为这可能是序列化的问题,但如果我修改我的云函数以仅返回单个DocumentSnapshot,则会返回预期的数据。
这是序列化的问题。您试图返回一个不应该直接序列化的复杂对象。相反,您应该迭代查询快照中的文档,构建您想要返回的任何对象(数组?)并返回它。像这样的东西:
const querySnapshot = await db.collection('test').get();
return querySnapshot.docs.map(doc => doc.data());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |