firebase 云函数执行时状态正常,但数据未写入firestore

ct3nt3jp  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(101)

我试图让我的firebase云函数获取一些JSON并将其写入firestore。函数运行,但它似乎没有写任何东西,我似乎无法记录是否有任何实际获取?你知道为什么不给消防商店取东西和写信吗?
当我console.log(response.data.response.feedMessageResponse.messages.message)
它显示了我希望看到的JSON值,lat,lng,time等。
如果我尝试执行console.log(message.messageType),我什么也得不到。

为什么不寄给消防商店?

import axios from "axios";
import { firestore } from 'firebase-admin';

type SpotResponse = {
  response: {
    feedMessageResponse: {
      count: number,
      messages: {
        message: Array<{
          latitude: number,
          longitude: number,
          unixTime: number,
          messageType: string,
          batteryState: string,
        }>,
      },
    },
    errors: Array<{}>,
  },
}

export default async () => {
  const FirestoreInstance = firestore();
    const feedID = '0u88e3hrgRoCDA4JEqkg41U1jhO25PbvW';
    const url = `https://api.findmespot.com/spot-main-web/consumer/rest-api/2.0/public/feed/${feedID}/latest.json`;
    const response = await axios.get<SpotResponse>(url)
    const messages = response.data.response.feedMessageResponse.messages.message;
    console.log(messages);
    while (messages.length > 0) {
      const message = messages.shift();
      if (!message) throw new Error('No more items in the queue');

      const formatedMessage: any = {
        timestamp: firestore.Timestamp.fromMillis(message.unixTime * 1000),
        location: new firestore.GeoPoint(message.latitude, message.longitude),
        messageType: message.messageType,
        batteryState: message.batteryState,
      }
      Object.keys(formatedMessage).forEach(key => formatedMessage[key] === undefined && delete formatedMessage[key]);

      FirestoreInstance.collection('locationHistory').doc().create(formatedMessage)
        .then((value: firestore.WriteResult) => {
          console.log('Successfully inserted document', formatedMessage, 'at', value.writeTime);
        })
        .catch((reason: any) => {
          console.error('Could not insert document', reason);
        });
    }
  }

这是我的索引。ts

import * as functions from 'firebase-functions';
import retrievePositionData from './retrievePositionData';

const admin = require('firebase-admin');
admin.initializeApp();

export const fetchLocations = functions.pubsub
  .schedule('*/10 * * * *')
  .timeZone('America/Montreal')
  .onRun(retrievePositionData);
8yparm6h

8yparm6h1#

我找到了一个更简单的方法,效果很好。

import axios from "axios";
import { firestore } from 'firebase-admin';

type SpotResponse = {
  response: {
    feedMessageResponse: {
      count: number,
      messages: {
        message: Array<{
          latitude: number,
          longitude: number,
          unixTime: number,
          messageType: string,
          batteryState: string,
        }>,
      },
    },
    errors: Array<{}>,
  },
}

export default async () => {
  const FirestoreInstance = firestore();
  const feedID = '0u88e3hrgRoCDA4JEqkg41U1jhO25PbvW';
  const url = `https://api.findmespot.com/spot-main-web/consumer/rest-api/2.0/public/feed/${feedID}/latest.json`;
  const response = await axios.get<SpotResponse>(url)
  const messages = response.data.response.feedMessageResponse.messages.message;

  type ObjectKey = keyof typeof messages;
  const myVar = 'latitude' as ObjectKey;

  type ObjectKey2 = keyof typeof messages;
  const myVar2 = 'longitude' as ObjectKey2;

  type ObjectKey3 = keyof typeof messages;
  const myVar3 = 'altitude' as ObjectKey3;

  type ObjectKey4 = keyof typeof messages;
  const myVar4 = 'unixTime' as ObjectKey4;

  const cityRef = FirestoreInstance.collection('2023WNS').doc('uDIP3FvGg2bxDbBusJ9cq4iIyec2');

const res = await cityRef.update({Lat: messages[myVar], Lng: messages[myVar2], Altitude: messages[myVar3], unixtime: messages[myVar4]});
console.log(res);

}

相关问题