我有一个Firebase Node.js后端,该后端使用> firebase serve(用于初步开发)在本地部署和运行。我能够在本地添加和更新文档(使用Postman模拟外部REST API)。在Firebase服务器上也是如此。 不不起作用的是我在本地运行时的删除文档例程。在Google的服务器版本上运行时,它们可以正常工作。 (请注意。当我运行Node的早期8.x版本时,删除例程在本地运行。
这是我的package.json
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "10"
},
"dependencies": {
"actions-on-google": "^2.7.0",
"firebase-admin": "^8.0.0",
"firebase-client": "0.1.1",
"firebase-functions": "^3.0.2",
"moment": "^2.24.0",
"request-promise-native": "^1.0.7",
"sprintf-js": "^1.1.2",
"twilio": "^3.32.0"
},
"devDependencies": {
"eslint": "^5.12.0",
"eslint-plugin-promise": "^4.0.1",
"firebase-functions-test": "^0.1.6"
},
"private": true
}
我的本地环境是Windows7。我正在使用Postman调用本地和服务版本,两者的日志相同,没有显示错误。
我的本地节点版本是v10.16.0
最后是我的删除例程。
'use strict'
const functions = require('firebase-functions')
var firebaseClient = require('firebase-client')
var moment = require('moment');
const serviceAccount = require("./myconfiguration Info");
const admin = require('firebase-admin');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "my db url"
});
var db = admin.firestore()
db.settings({ timestampsInSnapshots: true })
var sessionRef = db.collection('Sessions')
exports.clearSessions = async function(){
const response = await sessionRef.get().then(snapshot=>{
snapshot.forEach((doc=>{
if (doc.exists){
doc.ref.delete()
}
}))
return true
}).catch(err=>{
console.error(err)
console.log('return false')
return false
})
console.log(response)
return response
}
答案 0 :(得分:1)
我不确定这是否是问题,但是您忽略了delete()
返回的承诺。 clearSessions
将在解决之前返回。您不清楚谁的代码调用clearSessions
或之后发生了什么,但是如果您的程序在返回后终止,则工作可能无法完成。如果您打算从云函数中调用此函数,那么如果没有考虑到承诺,几乎可以肯定在该函数终止之前不会完成工作。
此外,您使用的是Firebase-admin的过时版本。尝试升级它。