Что я хочу сделать:
Я довольно плохо знаком с тем, как работают облачные функции, просто мне нужна помощь, чтобы понять, что я делаю неправильно.
Требуется запросить местоположение у пожарного хранилища, чтобы отреагировать на собственный клиент с помощью облачных функций Firebase.
Я пробовал что-то похожее на стороне клиента, но при выполнении запроса с облачными функциями нужно иметь такие же результаты.
код клиента:
import firebase from 'react-native-firebase';
const lat = 45.78768768
const lng = -67.56457667
const httpsCallable = firebase.functions().httpsCallable('findLocations');
let collection = this.props.navigation.state.params.document; //collection name eg hotels
const test = {
db: collection.name,
coordinates: {
latitude: lat,
longitude:lng
}
}
httpsCallable({
request: test })
.then(({ data }) => {
console.long(data);
this.setState({ data: data });
})
.catch((httpsError) => {
console.log(httpsError.code); // invalid-argument
console.log(httpsError.message); // Your error message goes here
});
Облачная функция:
const admin = require('./node_modules/firebase-admin');
const firebase = require('./node_modules/firebase');
const { GeoCollectionReference, GeoFirestore, GeoQuery, GeoQuerySnapshot } = require('./node_modules/geofirestore');
const serviceAccount = require('./serviceAccount.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'app-url',
});
const firestore = admin.firestore();
const geofirestore = new GeoFirestore(firestore);
const settings = { timestampsInSnapshots: true };
firestore.settings(settings);
exports.findLocations = functions.https.onCall((data) => {
if (!data.request) {
throw new functions.https.HttpsError(
'invalid-argument', // code
'Your error message goes here', // message
);
} else {
let locations = [];
const geocollection = geofirestore.collection(data.db);
geocollection
.limit(20)
.near({
center: new firebase.firestore.GeoPoint(data.latitude, data.longitude),
radius: 100,
})
.get()
.then((GeoQuerySnapshot) => {
GeoQuerySnapshot.docs.forEach((doc) => {
return locations.push(doc.data());
});
})
.catch(function(error) {
console.log('Error getting documents: ', error);
});
}
return { locations: locations };
});