Firebase函数:变量未定义的onCall

问题描述

我正在一个项目中尝试将变量从Angular前端传递到Firebase后端。但是,我在下面的代码中遇到了问题。我正在尝试使用存储在数据数组中的变量,但是在Firebase控制台中,它们作为未定义出现。我尝试制作一个nodeJS项目并运行此代码,但似乎工作正常……这可能是什么问题?

P.S。我也尝试过传递对象,但结果是相同的。

这是我的功能文件夹的index.ts:

import * as nodemailer from 'nodemailer';


// // Start writing Firebase Functions
// // https://firebase.google.com/docs/functions/typescript
//
export const sendMail = functions.https.onCall((data) => {

    

    console.log(data.text);
    const name = data[0];
    const email = data[1];
    const phoneNumber = data[2];
    const title = data[3];
    const body = data[4];

   const transporter = nodemailer.createTransport({
      host: "smtp.gmail.com",port: 465,secure: true,auth: {
          user: 'xxxxxxx',pass: 'xxxxxxxx',},});

  transporter.sendMail({
      from: 'xxxxxxx',to: "xxxxxxxx",subject: title,html: "<b>Message send by:<br></b>" + email + "<br><br>" + body,}).catch((_e: Error) => {
    const e:Error = _e
    console.log(e);
  });

  });

解决方法

传递给可调用云函数的参数是命名的,而不是有序的。因此,除非您以某种方式命名了参数01,否则您的查找不太可能起作用。

我建议检查调用此Cloud Function的代码,并在此处也使用该代码中使用的名称。如果您在调用代码中使用了名称nameemail,则Cloud Function如下所示:

const name = data.name;
const email = data.email;

如果您想验证传递给Cloud Function的参数是什么,而无需查看调用它的代码,则可以使用以下命令记录数据对象:

console.log(JSON.stringify(data));