我有一个 Google Cloud 函数,当在我的 Firestore 中写入文档时会触发该函数:
functions.cloudEvent('onItemCreate', async (cloudEvent: functions.CloudEvent<any>) => {
console.log("cloudEvent.data", typeof cloudEvent.data, cloudEvent.data)
const decodedData = cloudEvent.data.toString('utf8');
console.log("Decoded Data:", decodedData);
}
// > cloudEvent.data object <Buffer 0a 9e 03 0a 7f 70 72 6f 6a 65 63 74 73 2f 65 69 6e 73 6b 35 67 2d 69 6d 2d 64 65 76 2f 64 61 74 61 62 61 73 65 73 2f 66 69 72 65 73 74 6f 72 65 2d 69 ... 367 more bytes>
// > Decoded Data:
// �
// oprojects/my-project-id/databases/firestore/my-firestore/documents/items/Rfhg7PU9Rb1i55VNPzxH
// a�a��������"��������
我当前的方法存在一些奇怪的字符,如何正确解码数据?
当您在
.toString('utf8')
对象上调用 cloudEvent.data
时,您只是打印 cloudEvent
对象中存在的 encoded数据。这就是为什么你会得到那些难以区分的字符的原因。
如果您想解码数据,请使用以下代码行:
const firestoreReceived = DocumentEventData.decode(cloudEvent.data);
console.log('\nOld value:');
console.log(JSON.stringify(firestoreReceived.oldValue, null, 2));
console.log('\nNew value:');
console.log(JSON.stringify(firestoreReceived.value, null, 2));
如上所示,您现在可以打印旧值和新值。