web-dev-qa-db-fra.com

Erreur de Firebase: Fonction a échoué lors du chargement du code d'utilisateur (nœud.js)

Je suis un noob relatif avec Firebase Ma première fois l'utilise et suivez avec un tutoriel. Le didacticiel est un peu obsolète et j'ai réparer des bugs comme je l'ai allée, mais celui-ci m'a complètement coincé. J'essaie d'exécuter différentes fonctions qui déclenchent lorsqu'un document est créé dans certaines collections. Cependant, j'obtiens l'erreur suivante:

erreur

!  functions[createNotificationOnlike(us-central1)]: Deployment error.
Function failed on loading user code. Error message: Error: please examine your function logs to see the error cause: https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs

Il y a 3 autres erreurs identiques correspondant aux autres exportations dans le fichier index.js suivant.

index.js

exports.createNotificationOnlike = functions.firestore.document('likes/{id}').onCreate(async (snapshot) => {
    try {
        const doc = await db.doc(`posts/${snapshot.data().postId}`).get(); // we have access to user handle via the likes route
        if(doc.exists){
            await db.doc(`notifications/${snapshot.id}`).set({ // the id of the like is the same as the id of the notification that pertains to the like
                createdAt: new Date().toISOString,
                recipient: doc.data.userHandle,
                sender: snapshot.data().userHandle,
                type: 'like',
                read: false,
                postId: doc.id
            });
            return;
        }    
    } catch (err) {
        console.error(err);
        return;
    }
});

exports.removeNotificationOnUnlikePost = functions.firestore.document('likes/{id}').onDelete( async (snapshot) => {
    try {
        await db.doc(`notifications/${snapshot.id}`).delete();
        return;   
    } catch (err) {
        console.error(err);
        return;
    }
})

exports.createNotificationForComments = functions.firestore.document('comments/{id}').onCreate(async (snapshot) => {
    try {
        const doc = await db.doc(`posts/${snapshot.data().postId}`).get();
        if(doc.exists){
            db.doc(`notifications/${snapshot.id}`).set({
                createdAt: new Date().toISOString,
                recipient: doc.data.userHandle,
                sender: snapshot.data().userHandle,
                type: 'comment',
                read: false,
                postId: doc.id
            })
            return;
        }
    } catch (err) {
        console.error(err);
        return; // we dont need return messages since this isnt an endpoint it is a db trigger event
    }
})

// auto turn the app into base route url/api
exports.api = functions.https.onRequest(app);

J'ai vérifié les journaux comme suggéré par l'erreur et je reçois les messages suivants que je pense sont inutiles, il existe trois autres erreurs identiques pour les autres fonctions.

journaux d'erreur

removeNotificationOnUnlikePost
{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"Function failed on loading user code. Error message: Error: please examine your function logs to see the error cause: https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs"}

Voici mon fichier package.json

paquet.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase emulators:start --only functions",
    "Shell": "firebase functions:Shell",
    "start": "npm run Shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "10"
  },
  "dependencies": {
    "busboy": "^0.3.1",
    "express": "^4.17.1",
    "firebase": "^7.16.0",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.2.0"
  },
  "private": true
}

Enfin, voici mes trucs de configuration qui ont été utilisés pour tout initialiser:

admin.js

const admin = require('firebase-admin');
var serviceAccount = require('../../service-acct/socialapp-e5130-firebase-adminsdk-uo6p6-5495e18b97.json');

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    storageBucket: "socialapp-e5130.appspot.com",
    databaseURL: "https://socialapp-e5130.firebaseio.com"
});

const db = admin.firestore();

module.exports = { db, admin }

Firebase init

const firebase = require('firebase');
const config  = require('../util/config.js');
firebase.initializeApp(config);

P.s. Il convient de mentionner que le déclencheur http.onRequest (API) fonctionnait réellement et je me développais sans le déploiement d'utilisation de Firebase Service. Maintenant que je suis prêt à déployer ces déclencheurs, quelque chose se trompe. Toute aide est grandement appréciée

7
Suraj

Entrez cette commande pour obtenir un journal:

firebase functions:log
2
Chinmay Atrawalkar

dans mon cas, j'avais un fichier à partir de la lettre de cas de capital, mais exigez (...) avec une lettre minuscule, elle fonctionnait sur Mac car elle l'ignore, si nécessaire, mais le déploiement de ces fonctions entraîne cette erreur.

Renommer le fichier en minuscule fixe cette erreur pour moi.

0
Stanislau Buzunko

J'ai eu cette erreur une fois et je l'ai réparé en cochant à nouveau mon code, vérifiez peut-être que vous avez besoin ou importez une dépendance ou un module que vous n'avez pas installé et essayez de vérifier votre fichier package.json Assurez-vous d'installer tout le module et les dépendances nécessaires.

Mais surtout, le problème est due à l'importation d'un module que vous n'avez pas installé ou s'il existe un bogue dans votre code.

0
ISRAEL ODUGUWA

Avec la suggestion de la réponse recommandée, j'ai déplacé tout le code de mes fonctions de nuage sur le fichier Single Index.js (plutôt que "exiger" des déclarations) et cela semblait fonctionner pour moi. Notez que j'ai omis toutes les clés API et telles que cela fonctionnait toujours. Je suppose que depuis que ce déploiement est géré par le CLI Firebase, il sait déjà qu'il s'agit d'un environnement de confiance.

0
Joel Walkley