19
votes

La fonction cloud Firebase se termine avec le code 16 Qu'est-ce que le code d'erreur 16 et où puis-je trouver plus d'informations?

l'une de mes fonctions cloud sur firebase se termine avec le code 16 comme erreur.

J'ai essayé de google et de découvrir ce qu'est ce code, mais pas de chance du tout.

Error: Process exited with code 16
    at process.on.code (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:393:29)
    at process.emit (events.js:189:13)
    at process.EventEmitter.emit (domain.js:441:20)
    at process.exit (internal/process/per_thread.js:168:15)
    at logAndSendError (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:184:9)
    at process.on.err (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:390:13)
    at process.emit (events.js:189:13)
    at process.EventEmitter.emit (domain.js:441:20)
    at emitPromiseRejectionWarnings (internal/process/promises.js:119:20)
    at process._tickCallback (internal/process/next_tick.js:69:34)

Où puis-je trouver ces codes d'erreur signalés afin de comprendre pourquoi ma fonction s'arrête?


7 commentaires

Si vous rencontrez des problèmes avec l'émulateur Firebase CLI, publiez un problème sur son GitHub. Stack Overflow ne vous sera probablement pas très utile. github.com/firebase/firebase-tools


Salut @DougStevenson merci pour la réponse. Je n'ai aucun problème avec l'émulateur. c'est un problème de production et je cherche à apprendre où je peux trouver ces codes de sortie pour le nœud, je suppose.


Ensuite, vous voudrez fournir un MCVE avec votre message, afin que tout le monde puisse reproduire le problème. stackoverflow.com/help/minimal-reproducible-example


avez-vous mis à jour nodeJs / npm récemment? Je reçois également un problème similaire, mais je l'oublie maintenant. après avoir déclassé cela a fonctionné


@DougStevenson pourquoi ai-je besoin d'un exemple? Je veux juste savoir ce que signifie ce code d'erreur pour le nœud ou où chercher ces codes ... Je ne demande pas de résoudre mon erreur.


Vous faites peut-être quelque chose de manifestement mal dans votre code, auquel cas quelqu'un pourra peut-être le signaler. Cela dépend de vous, mais je doute que vous obteniez beaucoup de commentaires utiles sans un exemple de code et une description de ce qu'il essaie d'accomplir.


Je pense que je suis dessus. Doit être que j'envoie des en-têtes de 500 , puis plus tard, la fonction continue à s'exécuter et envoie un autre en-tête. Mais c'était mon cas. J'aurais découvert cela, si j'avais su par exemple que le code 16 est peut Headers already sent être des en- Headers already sent .


4 Réponses :


18
votes

Apparemment et après enquête, l'erreur signifie quelque chose comme: En- Headers already sent .

J'avais quelque part dans mon code un response.send() avec des en-têtes et ensuite, plus tard, j'envoyais une autre réponse.

Ce serait formidable si l'équipe Firebase pouvait élaborer sur ces problèmes et fournir de la documentation au lieu de nous laisser les yeux bandés (à ma connaissance)


3 commentaires

J'ai été touché par cela aujourd'hui (encore une fois, j'ai oublié un retour après une erreur). Où avez-vous trouvé les codes d'erreur? L'avez-vous signalé à l'équipe Firebase?


@Leo vérifie la console cloud (google) qui y publie les codes


Merci, mais je veux dire l'explication de par exemple le code 16. Je n'ai vu que quelque chose comme ce que vous avez posté sur la question.



3
votes

Une fonction de cloud mal terminée en est la cause probable.

Voici ce que disent la documentation Firebase :

  • Résolvez les fonctions qui exécutent un traitement asynchrone (également appelé «fonctions d'arrière-plan») en renvoyant une promesse JavaScript.

  • res.redirect() les fonctions HTTP avec res.redirect() , res.send() ou res.end() .

  • Terminer une fonction synchrone avec un return ; déclaration.

En bref, faites attention aux promesses flottantes et / ou aux appels multiples à res ou response .

J'ai également vu le Process exited with code 16 se produire en tandem avec:

Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
    at GoogleAuth.getApplicationDefaultAsync (/srv/functions/node_modules/google-auth-library/build/src/auth/googleauth.js:161:19)
    at process._tickCallback (internal/process/next_tick.js:68:7)


0 commentaires

1
votes

Eu le même problème. Comme @cDitch le mentionne, mon code n'était pas complet à 100%. Cependant, le plus gros problème pour moi était les paquets obsolètes .

J'avais besoin de mettre à jour firebase-admin, firebase-functions et firebase-tools ainsi que eslint.

vous pouvez voir quels packages sont obsolètes en exécutant:

npm run reinstall

Ensuite, j'ai changé les dépendances manuellement dans le package.json vers la dernière version mentionnée par npm obsolète.

Il est possible que cela provoque des problèmes de déploiement après cette opération. Au moins, c'est ce qui m'est arrivé. La suppression complète des node_modules et leur réinstallation ont résolu ce problème.

Voici deux lignes que j'ai ajoutées à mes scripts package.json pour faire cela sous Windows:

npm run clean
npm install
  • rmdir -> supprimer un répertoire
  • / s -> supprimer tout l'arborescence (donc tous les dossiers à l'intérieur)
  • / q -> faites cela tranquillement pour ne pas inonder votre terminal et devoir attendre toutes les lignes imprimées.

maintenant vous pouvez exécuter la commande suivante

"clean": "rmdir /s /q node_modules",
"reinstall": "npm run clean && npm install",

ou

npm outdated

pour exécuter ces étapes.


0 commentaires

1
votes

Le code du framework de fonction est en fait public dans le référentiel GoogleCloudPlatform / functions-framework-nodejs (bien qu'il ne soit annoncé nulle part).

En particulier, vous pouvez y voir les cas où killInstance est utilisé, qui est celui qui déclenche le code de sortie 16:

const killInstance = process.exit.bind(process, 16);

Ces cas sont (au moment de la rédaction):


3 commentaires

Êtes-vous sûr que ce ne sont que les 2 options? Et ne pas avoir déjà envoyé les en-têtes? Si oui, je dois marquer ceci comme correct et non ma réponse.


oui, c'est le seul endroit où exit (16) est appelé. Cela étant dit, il est possible que les en-têtes dupliqués déclenchent une exception, qui pourrait apparaître dans un bloc asynchrone non capturé de votre fonction, déclenchant ainsi unhandledRejection, déclenchant donc ce comportement, mais le premier indice / réponse ne devrait pas être celui-ci ( ce n'était pas dans mon cas)


Permettez-moi de marquer le vôtre comme valide, car il est plus complet et contient cette information. Remercier. tu