我已经创建了一个测试项目并确实根据文档进行了所有配置,但是当我运行该项目时,它没有按预期运行,在编写此问题之前,我曾在google上找到了一些重复的问题,但情况不同在每个问题中,因此我假设这是不是重复的问题。
这是我的终端命令和输出:
functions ➤ npm run serve
> functions@ serve /Users/codecrash/Developments/crm-firestore/functions
> firebase serve --only functions
✔ functions: Using node@8 from host.
✔ functions: Emulator started at http://localhost:5000
i functions: Watching "/Users/codecrash/Developments/crm-firestore/functions" for Cloud Functions...
i Your code has been provided a "firebase-admin" instance.
i functions: HTTP trigger initialized at http://localhost:5000/demo-crm/us-central1/helloWorld
Ignoring trigger "onWrite" because the Cloud Firestore emulator is not running.
Ignoring trigger "onUpdate" because the Cloud Firestore emulator is not running.
i functions: Beginning execution of "helloWorld"
i Your code has been provided a "firebase-admin" instance.
i functions: Finished "helloWorld" in ~1s
我不确定,怎么了。 helloWorld运行正常,但onUpdate和onWrite却不行。
我也通过运行以下命令
进行了尝试functions ➤ firebase emulators:start
i Starting emulators: ["functions","firestore"]
✔ functions: Using node@8 from host.
✔ functions: Emulator started at http://localhost:5001
i firestore: Logging to firestore-debug.log
✔ firestore: Emulator started at http://127.0.0.1:8080
i firestore: For testing set FIREBASE_FIRESTORE_EMULATOR_ADDRESS=127.0.0.1:8080
i functions: Watching "/Users/codecrash/Developments/crm-firestore/functions" for Cloud Functions...
i Your code has been provided a "firebase-admin" instance.
i functions: HTTP trigger initialized at http://localhost:5001/demo-crm/us-central1/helloWorld
i functions: Setting up Cloud Firestore trigger "onWrite"
✔ functions: Trigger "onWrite" has been acknowledged by the Cloud Firestore emulator.
i functions: Setting up Cloud Firestore trigger "onUpdate"
✔ functions: Trigger "onUpdate" has been acknowledged by the Cloud Firestore emulator.
i functions: Beginning execution of "helloWorld"
i Your code has been provided a "firebase-admin" instance.
i functions: Finished "helloWorld" in ~1s
,但使用onUpdate或onWrite触发器仍然不走运。 不知道我在做什么错。
这是我的代码库:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp({});
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
exports.onWrite = functions.firestore.document('users/{userId}').onWrite((change, context) => {
const document = change.after.exists ? change.after.data() : null;
const oldDocument = change.before.data();
// perform desired operations ...
console.log('local: onWrite change:', change);
console.log('local: onWrite context:', context);
console.log('local: onWrite document:', document);
console.log('local: onWrite oldDocument:', oldDocument);
return Promise.resolve();
});
exports.onUpdate = functions.firestore.document('users/{userId}').onUpdate((change, context) => {
const document = change.after.exists ? change.after.data() : null;
const oldDocument = change.before.data();
// perform desired operations ...
console.log('local: onUpdate change:', change);
console.log('local: onUpdate context:', context);
console.log('local: onUpdate document:', document);
console.log('local: onUpdate oldDocument:', oldDocument);
return new Promise().then(() => {
return Promise.resolve();
}).catch((error) => {
return Promise.reject('error:code_crash');
});
});
我在env变量中添加了键:
GOOGLE_APPLICATION_CREDENTIALS="/Users/codecrash/Developments/crm-firestore/functions/certificate.json"
FIREBASE_CONFIG="/Users/codecrash/Developments/crm-firestore/functions/certificate.json"
注意:当我将其部署到云功能上时,它工作正常。
谢谢。
答案 0 :(得分:0)
我不知道为什么文档中没有明确提到这一点,但是很明显,需要使客户端sdk知道模拟器。有一个API可以将客户端SDK指向本地仿真器实例。这是初始化Firebase应用程序后立即在项目中进行设置的方法。希望有帮助。
firebase.initializeApp(CONFIG);
if (process.env.NODE_ENV === 'development') {
firebase.functions().useFunctionsEmulator('http://localhost:5001');
}
答案 1 :(得分:-1)
我通过创建私钥找到了解决上述类似问题的方法
获取如图所示的私钥。 然后声明一个全局变量 GOOGLE_APPLICATION_CREDENTIALS,然后指向下载的文件。 在Linux中,您可以将其放在/home/user/.profile中
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/key.js"
如果上述方法也不起作用,那么唯一的解决方案是将密钥放入index.js中。
admin.initializeApp({
credential: admin.credential.cert(require("/home/thilanka/Developments/admin-key.json")),
databaseURL: "https://socialape-9c4c4.firebaseio.com"
});