我的代码有问题。我在离子项目(带有打字稿)中使用Firebase函数。当我运行“ firebase serve”时,我的函数可以工作并且可以获取数据,但是当我在ionic中导出函数时,出现以下错误:
未捕获的错误:响应缺少数据字段。在新的HttpsErrorImpl (index.cjs.js:58)在服务。 (index.cjs.js:553)在步骤 (tslib.es6.js:100)在Object.next(tslib.es6.js:81)在实现 (tslib.es6.js:71)在ZoneDelegate.invoke(zone-evergreen.js:359)在 ZoneDelegate.invoke上的Object.onInvoke(core.js:39699) (Zone-evergreen.js:358)在Zone.run(zone-evergreen.js:124)在 zone-evergreen.js:855
这是我的firebase函数:
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
const serviceAccount = require('../permissions.json')
const cors = require('cors')({ origin: true })
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://{'myUrl'}.firebaseio.com'
})
export const posts = functions.https.onRequest(async (request, response) => {
const docs = await admin.firestore().collection('posts').orderBy('date', 'desc').get()
cors(request, response, () => {})
response.json(
docs.docs.map((doc) => {
return {
postID: doc.id,
...doc.data()
}
})
)
})
这是我的代码:
import { Component, OnInit } from '@angular/core';
import { AngularFireFunctions } from '@angular/fire/functions'
export class SharedModule {}
@Component({
selector: 'app-feed',
templateUrl: './feed.page.html',
styleUrls: ['./feed.page.scss'],
})
export class FeedPage implements OnInit {
posts
sub
constructor(private aff:AngularFireFunctions) {
}
ngOnDestroy() {
this.sub.unsubscribe()
}
ngOnInit() {
const posts = this.aff.httpsCallable('posts')
this.sub = posts({}).subscribe(data =>{
this.posts = data
} )
}
}
如果有人不知道为什么它不起作用,请使用向上按钮将这个问题推到顶部,也许其他人知道它非常重要,因为我真的需要迅速解决此错误
先谢谢您
答案 0 :(得分:0)
您正在调用callable function:
const a = {"a": "a"};
const b = {"a": "a"};
expect(a).to.equal(b); // false, as a refers to a different object than b
expect(a).to.deep.equal(b); // true, as the value of every property of a and b equals
但是您的函数不是callalbe类型的。正如您从函数构建器中的const posts = this.aff.httpsCallable('posts')
中看到的那样,它是HTTP function:
onRequest
如果要编写可调用函数,请使用链接的文档中的示例。您将使用export const posts = functions.https.onRequest(async (request, response) => {
而不是onCall
。请注意,它们具有非常不同的API。