Я создаю игровой опыт для студентов.Игра похожа на опасность и записывает данные в базу данных в реальном времени по мере прохождения игры.В конце игры я хотел бы отправить студентам электронное письмо, подтверждающее, что они закончили со своим счетом и временем / датой окончания.
Для этого я настроил следующий код в облачных функциях.Однако, когда я запускаю код вне триггера, некоторые из значений, которые я прочитал из базы данных, отображаются как неопределенные - это означает, что некоторые данные отсутствуют в электронном письме.Что здесь происходит???
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const nodemailer = require('nodemailer');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'https://[MY DATABASE URL]/'
});
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: gmailEmail,
pass: gmailPassword,
},
});
var email;
var exitTime;
var name;
var userScore;
exports.gameDoneNotice=functions.database.ref("USERS/{termDate}/GameData/{myUID}/ExitDateTime")
.onCreate(async (snapshot, context) => {
const myNumber = context.params.myUID;
const myRotation = context.params.termDate;
var adminDB = admin.database();
exitTime = snapshot.val();
var aRef = adminDB.ref("USERS/" + myRotation + "/GameData/" + myNumber + "/");
aRef.on("value", (snapshot) => {
email = snapshot.child("eMail").val();
name = snapshot.child("Name").val();
userScore = snapshot.child("User Score").val();
});
var emailsaad = "MYEMAIL@EMAIL.COM";
console.log(myNumber);
console.log(myRotation);
console.log(userScore);
console.log(name);
const APP_NAME = 'WCM-Q DeLib eLearning';
const mailOptions = {
from: `${APP_NAME} <noreply@firebase.com>`,
to: email,
bcc: emailsaad,
};
mailOptions.subject = `Welcome to ${APP_NAME}!`;
mailOptions.html = `<h3>Dear, ${name}</h3><p>Thank you for completing the Medicine Clerkship EBM game.</p><hr><h4>Your Score: <font color="red">${userScore}</font></h4><h4>Game Completion Time/Date: <font color="green">${exitTime}</font></h4><hr><p>If you have any questions about the game or your EBM project in this clerkship, don’t hesitate to ask for clarification. Otherwise, your next step is to begin to prepare with your group for your presentation.</p>`;
try {
await mailTransport.sendMail(mailOptions);
console.log("eMail was a success");
} catch(error) {
console.error('Something has gone horribly wrong, bro!', error);
}
return null;
});
Я ожидаю, что смогу прочитать значения, которые мне нужны для электронной почты, userScore и т. Д., Из базы данных и включить их в mailOptions перед его отправкой.Однако, когда я получаю электронное письмо после триггера, все значения из прочитанной базы данных «неопределены».