У меня есть приложение, и я хочу обновлять информацию о погоде каждые 5 минут. Я создаю функцию PubSub на облачной функции Google, чтобы получать сведения о погоде с веб-сайта weatherstack.com , а затем пытаюсь сохранить результат в FireStore с помощью Admin SDK . API погоды работает отлично, но функция, которая записывает данные в FireStore, не сработала.
Мой код:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const requestApi = require('request');
admin.initializeApp();
exports.WeatherPubSub = (event, context) => {
requestApi({
url: 'http://api.weatherstack.com/current?access_key=XXXXXXXXXXXXXXXXXXXX&query=XXXXX',
method: "POST"
}, (error, response, body) => {
//console.log(JSON.parse(body));
if (error) {
console.log('error:', error); // Print the error if one occurred
} else {
console.log("=> "+ response.statusCode);
//Call firestore to update weather data
return admin.firestore().collection('settings').doc('weather').update({
temperature: body.current['temperature'],
humidity: body.current['humidity'],
weather_descriptions: body.current['weather_descriptions'][0]
}).then(function() {
console.log('Done!');
});
}
});
//return null;
};
пакет. json
{
"name": "functions",
"version": "0.0.2",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "8"
},
"dependencies": {
"@google-cloud/pubsub": "^1.5.0",
"firebase-admin": "^8.9.2",
"firebase-functions": "^3.3.0",
"request": "^2.88.2"
},
"devDependencies": {
"firebase-functions-test": "^0.1.6"
},
"private": true
}