如何解决离子打字稿的firebase未捕获错误?

时间:2020-08-04 13:56:54

标签: angular typescript firebase ionic-framework google-cloud-functions

我的代码有问题。我在离子项目(带有打字稿)中使用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
  } )
     
   } 
}

如果有人不知道为什么它不起作用,请使用向上按钮将这个问题推到顶部,也许其他人知道它非常重要,因为我真的需要迅速解决此错误

先谢谢您

1 个答案:

答案 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。