web-dev-qa-db-fra.com

Erreur: Erreur HTTP 400, la demande contient des erreurs. Fonctions Cloud de Firebase Firestore

Pendant que j'exécute la commande firebase deploy, j'obtiens cette erreur:

je déploie des fonctions

fonctions i: s'assurer que les API nécessaires sont activées ...

i runtimeconfig: s'assurer que les API nécessaires sont activées ...

✔ runtimeconfig: toutes les API nécessaires sont activées

✔ fonctions: toutes les API nécessaires sont activées

fonctions i: préparation du répertoire des fonctions pour le téléchargement ...

fonctions i: fonctions packagées (4,04 Ko) pour le téléchargement

✔ fonctions: dossier de fonctions téléchargé avec succès

je démarre le processus de libération (cela peut prendre plusieurs minutes) ...

fonctions i: création d'une fonction suiveuse Notification ...

⚠ fonctions: échec de création de la fonction suiveur

⚠ fonctions: Erreur HTTP: 400, la demande contient des erreurs

⚠ fonctions: 1 fonction (s) n'a pas pu être déployée.

Les fonctions de déploiement comportaient des erreurs. Pour continuer à déployer d'autres fonctionnalités (telles que> base de données), exécutez: firebase deploy --except functions

Erreur: les fonctions ne se sont pas déployées correctement.

Avoir des problèmes? Essayez Firebase deploy --help

Tout le reste fonctionne sans problème. Seulement quand j'essaye de faire quelque chose avec Firebase Firestore.

29
Loyal

Cela m'arrivait aussi, puis je me suis rendu compte qu'au 2e niveau, le firestore n'autorise que les documents et non les collections.

J'essayais d'écouter ce chemin:

/collection/document/{wildcard}

Vous pouvez soit faire quelque chose comme

/collection/{wildcard}

ou

/collection/document/collection/{wildcard}
70
Ivan

J'ai aussi eu ce problème. Dans mon cas, c'était parce que mon chemin de déclenchement avait une barre oblique dans le chemin du document.

Si changeant:

functions.firestore
  .document('some_path/{pushId}/')

À:

functions.firestore
  .document('some_path/{pushId}')

Je l'ai réparé pour moi. Il semble que cela soit dû à une variété de problèmes et la cli Firebase ne fait pas un bon travail pour expliquer les raisons.

7
adamduren

Le problème est que vous ne faites référence qu'à une collection et non à un document comme:

exports.myFunctionName = functions.firestore
      .document('users/marie').onWrite((event) => {
        // ... Your code here
      });

Vous devez référencer le document comme:

exports.myFunctionName = functions.firestore
  .document('users/marie').onWrite((event) => {
    // ... Your code here
  });

Vous pouvez également utiliser un caractère générique comme:

exports.myFunctionName = functions.firestore
  .document('users/{userId}').onWrite((event) => {
    // ... Your code here
  });

Il est décrit ici: https://firebase.google.com/docs/functions/firestore-events

J'espère que je pourrais aider

5
Raphael Jenni

Le problème est probablement dû à la longueur du nom de la fonction.

Donc, si le nom est:

myFunctionsFromWorksWithCustumersTiggersTests

changer pour un nom plus court, comme:

WorkWithCustumers

J'espère avoir aidé.

1

Okej c'est ce que vous devez regarder.

puisque tu as

exports.yourFunctionName = functions.firestore.document

la chose que vous devez regarder est le .document

Votre chemin [[# # ~] doit [~ # ~] pointer vers un document et non vers une collection.

donc cela ne fonctionnera pas:

/level1/{level1Id}/level2 <- il pointe vers une collection

cela fonctionnera:

/level1/{level1Id}/level2/{level2Id}

la fonction cloud recherchera lorsqu'un document a un action

J'espère que cela aidera n'importe qui

1
Cyrus Zei

J'obtenais également la même erreur jusqu'à ce que je change mon nom de fonction

create_template_

à

create_new_template

Il se peut que "_" (trait de soulignement) à la fin du nom de la fonction entraîne cette erreur.

1
SHUBHAM SINGH

J'ai vécu cela en raison du trait de soulignement au début du nom de la fonction d'exportation. Vous pouvez le tester vous-même en essayant ceci:

exports._someLongNameWithUnderscore= functions.auth.user().onCreate(user => {
  return true;
});

exports.someLongNameWithoutUnderscore= functions.auth.user().onCreate(user => {
  return true;
});

exports.shortName= functions.auth.user().onCreate(user => {
  return true;
});

Celui avec le trait de soulignement au début ou à la fin échouera avec HTTP:400 et les autres se déploieront.

0
sanjsanj

J'ai eu la même erreur en essayant de publier une fonction écoutant un pub/sub Cloud, qui commençait par des caractères numériques.

exports.nightly_pruning = functions.pubsub.topic('24hr-tick').onPublish((event) => { 
    ... 
});

Corrigé en changeant simplement le nom:

exports.nightly_pruning = functions.pubsub.topic('nightly-tick').onPublish((event) => { 
    ... 
});

(Merci à Nikolai Hegelstad ci-dessus. Je n'ai pas la réputation de commenter.)

0
Aidan Davis

Cela peut également se produire si vous utilisez la mauvaise version Node. Je viens de ressentir cela après avoir défini ma version de nœud sur 8.x tout en travaillant sur les fonctions. Revenu à v10.x et le problème disparu.

0
Mark Flegg

Je voulais juste souligner également que le linter rejettera les sauts de ligne sur la déclaration de l'auditeur, c'est-à-dire:

exporst.myFunc = functions.firestore
.document('collection/{uid}')
.onEvent(...)

dont le linter n'aide pas beaucoup et n'est pas couvert dans la documentation (comme d'habitude)

0
Cyrus Talladen

Mon problème avec le même message d'erreur était que le pubsub de Cloud Functions ne semble pas prendre en charge les sujets dont les noms commencent par des caractères numériques.

0
Nikolai Hegelstad