私はそれを使ってチュートリアルと共に、私の初めてFirebaseを持つ相対的なnoobです。チュートリアルは少し古くなっていて、私は行ってきたようにバグを修正してきましたが、これは私を完全に動けなくなった。私は、文書が特定のコレクションで作成されたときにトリガーされるさまざまな機能を実行しようとします。ただし、次のエラーが発生します。
エラー
! 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
_
次のindex.jsファイルの他のエクスポートに対応する3つの同一のエラーがあります。
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);
_
私はエラーによって提案されたようにログをチェックしました、そして私が無用であると思う次のメッセージを受け取りました、他の関数には3つの同一のエラーがあります
エラーログ
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 Init
const firebase = require('firebase');
const config = require('../util/config.js');
firebase.initializeApp(config);
_
P.S. http.onrequestトリガー(API)が実際に働いていて、Firebase Serveを使用して展開せずに開発していることを言及する価値があります。私はこれらのトリガーを展開する準備ができているので、何かがうんざりして間違っています。あらゆる助けが大いに感謝されています
ログを取得するためにこのコマンドを入力してください。
firebase functions:log
_
私の場合私は資本ケースの文字で始まるファイルを持っていましたが、小文字で(...)を必要としていましたが、それは私が理解するようにそれがそれを無視していますが、これらの関数を展開するので、このエラーになります。
小文字へのファイル名変更私にとってこのエラーを修正しました。
私はこのエラーを一度持っていました、そして私のコードをもう一度確認することによってそれを修正しました、あなたがインストールしていない依存関係やモジュールを必要とし、あなたのpackage.jsonファイルをチェックしようとするかもしれません。必要なモジュールと依存関係をすべてインストールしてください。
しかし、ほとんどの場合、インストールしなかったモジュールのインポートまたはコードにバグがあります。
推奨回答の提案で、私のクラウド機能コードをすべて単一のindex.jsファイルに移動しました( '件のステートメントではなく)、それは私のために働くようでした。私はAPIキーなどを省略し、まだ機能しました。この展開はFirebase CLIによって処理されるため、これは信頼できる環境です。