tutorial google functions firestore example deploy javascript firebase for-loop google-cloud-functions firebase-cloud-functions

javascript - google - Funciones de la nube para el error de Firebase: "400, no se permite el cambio del tipo de activaciĆ³n de la funciĆ³n o el proveedor de eventos"



firebase functions express (2)

Cuando ejecuto firebase-deploy me firebase-deploy este mensaje de error:

functions: HTTP Error: 400, Change of function trigger type or event provider is not allowed

En mi controlador, en onAuthStateChanged , onAuthStateChanged el user.uid y luego lo actualizo a una ubicación de la base de datos cuando un usuario inicia sesión. Este código funciona bien:

firebase.auth().onAuthStateChanged(function(user) { // this runs on login if (user) { // user is signed in console.log("User signed in!"); $scope.authData = user; firebase.database().ref(''userLoginEvent'').update({''user'': user.uid}); // update Firebase database to trigger Cloud Function to get a new IBM Watson token } // end if user is signed in else { // User is signed out console.log("User signed out."); } });

Aquí está mi función de nube. Está destinado a activarse cuando un usuario inicia sesión, lo que actualiza una ubicación en la base de datos de Firebase. La función luego envía una solicitud HTTP a IBM Watson para obtener un token, luego escribe el token en un archivo. La función se ejecuta correctamente desde el nodo. El disparador parece ser el problema.

const functions = require(''firebase-functions''); const admin = require(''firebase-admin''); const request = require(''request''); // node module to send HTTP requests const fs = require(''fs''); admin.initializeApp(functions.config().firebase); exports.getWatsonToken = functions.database.ref(''userLoginEvent'').onUpdate(event => { // authentication trigger when user logs in var username = ''groucho'', password = ''swordfish'', url = ''https://'' + username + '':'' + password + ''@stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api''; request({url: url}, function (error, response, body) { var tokenService = "app.value(''watsonToken'',''" + body + "'');"; fs.writeFile(''../public/javascript/services/watsonTokenValue.js'', tokenService, (err) => { if (err) throw err; console.log(''The file has been saved!''); }); // close fs.writeFile }); // close request }); // close getWatsonToken


Básicamente, la solución es comentar o eliminar su función y luego guardar el archivo de Funciones y desplegar. La función se eliminará en Firebase, pero después de eso puede insertar / descomentar su función y se implementará de nuevo. Este error se produce cuando toma una función y cambia el tipo de activador que utiliza, es decir, HTTP, base de datos o autenticación.

En primer lugar cortarlo

/* exports.yourFunction = someTrigger... */

Y luego, después de la implementación ("implementación de base de fuego") reemplace su disparador

exports.yourFunction = anotherTrigger...

Esto se puede hacer más fácilmente usando las functions:delete comando de functions:delete :

firebase functions:delete yourFunction

La documentación presenta casos de uso más avanzados también.


También puede ir al panel de Funciones de la nube en la consola de la Plataforma de la nube de Google y eliminar la función desde allí. Después de eso, puede cargar la función normalmente desde el CLI de base de fuego. No estoy seguro de por qué no tienen una opción de función de eliminación en la consola firebase.