【问题标题】:Call cloud function from angular app with parameters从带有参数的角度应用程序调用云函数
【发布时间】:2019-12-17 00:33:11
【问题描述】:

我有 Angular + Firebase 应用程序。

在我的 Cloud Functions 中,我有下一个函数:

export const getUserByEmail = functions.https.onRequest((request, response) => {
  const email = request.body.email

  admin.auth().getUserByEmail(email)
    .then(user => {
      response.send(user)
    })
    .catch(error => {
      response.status(500).send(error)
    })
})

我想在 Angular 服务中调用它:

  getUserByEmail(email) {
    const getUserData = this.fireFunction.httpsCallable('getUserByEmail')

    return getUserData({ request.body.email: email })
  }

这是正确的方法,它是如何工作的?或者我应该如何调用带参数的函数?

【问题讨论】:

  • 将 getUserData({....}) 中传递的请求正文更改为 {body: {email: "email@email.co"}} 应该是正确的方式
  • @HimanshuChaudhary 云函数根本没有在请求中看到正文,当我 console.log(request.body) 它的日志'未定义'

标签: angular firebase google-cloud-functions


【解决方案1】:

您实际上混淆了HTTP Cloud FunctionsCallable Cloud Functions

您的 Cloud Function 代码对应一个 HTTP 代码 (functions.https.onRequest(...)),但您前端的代码调用了一个 Callable 代码 (const getUserData = this.fireFunction.httpsCallable('getUserByEmail'))。

您应该按照以下思路调整其中一个,最有可能将您的云函数调整为可调用函数:

exports.getUserByEmail = functions.https.onCall((data, context) => {
  const email = data.email;

  return admin.auth().getUserByEmail(email )
  .then(userRecord => {
        const userData = userRecord.toJSON();
        return { userData: userData };
  })
});

【讨论】:

猜你喜欢
  • 2013-08-22
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多