Я установил функцию firebase с помощью nodemailer, чтобы получить входные данные из моей базы данных firebase, подключенной к моей контактной форме, и отправить их по электронной почте.
Я успешно развернул функцию и вижу, что функция отображается в моей консоли firebase, однако я не получаю никаких ошибок в консоли и не вижу никаких журналов или информации в функциональном разделе консоли. А сейчас это просто не работает.
Это первый раз, когда я делаю это, и я просмотрел почти все другие похожие вопросы по SO, но ни один из них не дал мне никаких подсказок относительно того, что я делаю неправильно.
Это мои функции package.json:
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "firebase serve --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "8"
},
"dependencies": {
"firebase-admin": "~7.0.0",
"firebase-functions": "^2.3.0",
"nodemailer": "^6.1.1"
},
"devDependencies": {
"eslint-plugin-promise": "^4.0.1",
"firebase-functions-test": "^0.1.6"
},
"private": true
}
и это код index.js внутри папки functions:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const nodemailer = require("nodemailer");
const gmailEmail = "k****[email protected]";
const gmailPassword = functions.config().gmail.pass;
admin.initializeApp();
var goMail = function(message) {
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: gmailEmail,
pass: gmailPassword
}
});
const mailOptions = {
from: gmailEmail, // sender address
to: "****[email protected]", // list of receivers
subject: "!", // Subject line
text: "!" + message, // plain text body
html: "!" + message // html body
};
const getDeliveryStatus = function(error, info) {
if (error) {
return console.log(error);
}
console.log("Message sent: %s", info.messageId);
};
transporter.sendMail(mailOptions, getDeliveryStatus);
};
exports.onDataAdded = functions.database
.ref("/messages/{messageId}")
.onCreate(function(snap, context) {
const createdData = snap.val();
var name = createdData.name;
var email = createdData.email;
var number = createdData.number;
var message = createdData.message;
goMail(name, email, number, message);
});
Я не уверен, что моя установка неправильная или я что-то делаю не так с кодом nodemailer в index.js.
Спасибо за помощь заранее.
onDataAdded
запускается, когда узел узла создается в/emails
, и ожидает, что этот новый узел будет иметь свойствоemail
, которое является телом сообщения, которое вы хотите отправить людям. - person Frank van Puffelen   schedule 15.05.2019var messageRef = firebase.database().ref("messages");
- это ссылка на коллекцию в моей базе данных, из того, что вы мне до сих пор объяснили, я думаю, вместоexports.onDataAdded = functions.database .ref("/emails/{sessionId}")
мне нужно иметьexports.onDataAdded = functions.database .ref("/messages/{sessionId}")
? Спасибо еще раз. - person Ikai Yanasaki   schedule 15.05.2019transporter.sendMail()
(Node Mailer вернет обещание, если обратный вызов не задан (nodemailer.com/usage)). Ключевым моментом является возврат обещания, как объясняется в трех видеороликах о обещаниях JavaScript из серии видео Firebase: firebase.google.com/docs/functions/video-series - person Renaud Tarnec   schedule 15.05.2019