【问题标题】:Firebase error: Function failed on loading user code (node.js)Firebase 错误:加载用户代码(node.js)时函数失败
【发布时间】:2020-10-31 17:23:54
【问题描述】:

我是第一次使用 Firebase 并遵循教程的相对菜鸟。该教程有点过时了,我一直在修复错误,但是这个让我完全陷入困境。我尝试运行在创建文档时触发的不同功能 在某些收藏中。但是,我收到以下错误:

错误

!  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

还有 3 个相同的错误对应于以下 index.js 文件中的其他导出。

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);

我已按照错误提示检查了日志,并收到以下我认为无用的消息,其他功能还有其他三个相同的错误

错误日志

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"}

这是我的 package.json 文件

Package.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
}

最后,这是我用来初始化一切的配置文件:

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 初始化

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

附:值得一提的是,http.onRequest 触发器(api)实际上正在工作,而且我一直在开发而不使用 firebase serve 进行部署。现在我已准备好部署这些触发器,但出现了严重的错误。非常感谢任何帮助

【问题讨论】:

标签: node.js firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

我在设置 SendGrid 时遇到了同样的问题。

我收到此错误是因为我不小心将 SendGrid 安装到了根文件夹而不是函数文件夹。

确保使用 cmd 提示符将您的服务安装到您的函数文件夹。它应该看起来像这样:

D:\firebaseProject\functions> npm i @sendgrid/mail

【讨论】:

    【解决方案2】:

    根据推荐答案的建议,我将所有云函数代码移至单个 index.js 文件(而不是“require”语句),它似乎对我有用。请注意,我省略了任何 API 密钥等,它仍然有效。我假设由于这个部署是由 firebase CLI 处理的,它已经知道这是一个受信任的环境。

    【讨论】:

      【解决方案3】:

      输入此命令获取日志:

      firebase functions:log
      

      【讨论】:

      • 为什么默认不启用!感谢您的提示。
      • 这对我有用。 package.json 文件中缺少依赖项
      • 谢谢,为我工作,原来 myServiceAccount.json 文件路径错误
      • 我有与 gloud 相关的错误。本地日志比网络日志更有帮助。命令:gcloud functions logs read
      【解决方案4】:

      在我的情况下,我有一个以大写字母开头的文件,但 require(...) 以小写字母开头,它可以在 Mac 上运行,因为据我所知,它会忽略它,但是部署这些函数会导致此错误.

      将文件重命名为小写为我解决了这个错误。

      【讨论】:

        【解决方案5】:

        我曾经遇到过这个错误,我通过再次检查我的代码来修复它,检查您是否需要或导入您尚未安装的依赖项或模块并尝试检查您的 package.json 文件确保您安装了所有必要的模块和依赖关系。

        但问题主要是由于导入了您未安装的模块或代码中存在错误

        【讨论】:

          【解决方案6】:

          我遇到了完全相同的问题,尝试部署与您完全相同的代码,我只是能够让它正确部署。

          如果你的问题和我的一样,那就是问题所在:

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

          看起来在部署到 firebase 时,您无法让代码尝试到达项目文件夹之外,因此解决方案是使用不推荐的密钥或将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为您的文件路径服务帐户密钥 json 文件,如 https://firebase.google.com/docs/admin/setup#windows 中所述,然后就拥有了

          admin.initializeApp();
          

          【讨论】:

          • 谢谢,可以了,还需要删除所有require("firebase-admin"),应该使用import
          猜你喜欢
          • 2020-11-15
          • 1970-01-01
          • 2019-10-27
          • 1970-01-01
          • 2021-11-06
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多