我正在进行一个项目,尝试将变量从Angular前端传递到Firebase后端。然而,我在下面的代码中遇到了一个问题。我试图使用存储在数据数组中的变量,但在Firebase控制台中,它们显示为未定义的。我试着做了一个nodeJS项目并运行了这段代码,它似乎运行得很好。。。问题出在哪里?
附言:我也试过传递一个对象,但结果是一样的。
这是我的函数文件夹的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);
});
});
传递给可调用云函数的参数是命名的,而不是排序的。因此,除非您以某种方式将参数命名为0
和1
,否则您的查找不太可能工作。
我建议检查调用这个云函数的代码,并在这里使用该代码中使用的名称。如果您在调用代码中使用了名称name
和email
,那么Cloud函数将如下所示:
const name = data.name;
const email = data.email;
如果您想在不查看调用云函数的代码的情况下验证传递给云函数的参数,您可以使用记录数据对象
console.log(JSON.stringify(data));