nodejs管理员SDK中的Firestore时间戳

时间:2019-07-17 13:21:17

标签: typescript google-cloud-firestore google-admin-sdk

我正在尝试在NodeJS管理SDK中将时间戳从Firestore转换为Date对象。但是我总是得到这样的错误,即toDate()不是一个函数。为什么?如何在admin SDK中将时间戳转换为Date对象??

这是我尝试过的代码。

this.getService.sample()
  .then(doc => {
    const callable = this.fns.httpsCallable('myTestFn');
    const data$ = callable({ text: 'google', arraySize: 10, date: doc.data().date });
    data$.toPromise()
      .then(e1 => {
        console.log(e1);
      }).catch(err => {
        console.log(err);
      })
  });

onCall函数:

const original = data.text;
    const arraySize: number = data.arraySize;
    if (arraySize > 100) {
        // Throwing an HttpsError so that the client gets the error details.
        throw new functions.https.HttpsError('unknown', 'invalid request,input is above the permistted range!');
    }
    const date = data.date.toDate();
    console.log('--- This is the date---', date);
    const numberArray = [];
    for (let i = 1; i <= arraySize; i++) {
        await numberArray.push(i);
    }
    const sum = await numberArray.reduce((acc, curr) => acc + curr, 0);
    console.log('-----------sum-------------', sum)
    const writeResult = await admin.firestore().collection('messages').add({ original: original,sum, createdAt: admin.firestore.FieldValue.serverTimestamp() });
    return { wish: 'A wish from function', original, writeResult: writeResult.id, numberArray, sum };

1 个答案:

答案 0 :(得分:0)

在将值从客户端传递到服务器时,可调用函数不保留数据类型。当您将date: doc.data().date传递给函数时,您可能在客户端上传递了一个Timestamp类型的对象,但是它不会在函数中显示为Timestamp类型的对象。它可能显示为该时间戳记的序列化版本,它将只是一个具有秒和纳秒两个属性的对象。如果要将该对象视为时间戳记,则必须手动将该对象转换为一个。