问题描述
我正在一个项目中尝试将变量从Angular前端传递到Firebase后端。但是,我在下面的代码中遇到了问题。我正在尝试使用存储在数据数组中的变量,但是在Firebase控制台中,它们作为未定义出现。我尝试制作一个nodeJS项目并运行此代码,但似乎工作正常……这可能是什么问题?
P.S。我也尝试过传递对象,但结果是相同的。
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);
});
});
解决方法
传递给可调用云函数的参数是命名的,而不是有序的。因此,除非您以某种方式命名了参数0
和1
,否则您的查找不太可能起作用。
我建议检查调用此Cloud Function的代码,并在此处也使用该代码中使用的名称。如果您在调用代码中使用了名称name
和email
,则Cloud Function如下所示:
const name = data.name;
const email = data.email;
如果您想验证传递给Cloud Function的参数是什么,而无需查看调用它的代码,则可以使用以下命令记录数据对象:
console.log(JSON.stringify(data));